Inspect a string for sensitive data by using multiple rules

Illustrates applying both exclusion and hotword rules. This snippet's rule set includes both hotword rules and dictionary and regex exclusion rules. Notice that the four rules are specified in an array within the rules element.

Explore further

For detailed documentation that includes this code sample, see the following:

Code sample

C#

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  using 
  
 System 
 ; 
 using 
  
 System.Text.RegularExpressions 
 ; 
 using 
  
  Google.Api.Gax.ResourceNames 
 
 ; 
 using 
  
  Google.Cloud.Dlp.V2 
 
 ; 
 using 
  
 static 
  
 Google 
 . 
 Cloud 
 . 
 Dlp 
 . 
 V2 
 . 
 CustomInfoType 
 . 
 Types 
 ; 
 public 
  
 class 
  
 InspectStringMultipleRules 
 { 
  
 public 
  
 static 
  
 InspectContentResponse 
  
 Inspect 
 ( 
 string 
  
 projectId 
 , 
  
 string 
  
 textToInspect 
 ) 
  
 { 
  
 var 
  
 dlp 
  
 = 
  
  DlpServiceClient 
 
 . 
  Create 
 
 (); 
  
 var 
  
 byteContentItem 
  
 = 
  
 new 
  
  ByteContentItem 
 
  
 { 
  
 Type 
  
 = 
  
  ByteContentItem 
 
 . 
  Types 
 
 . 
  BytesType 
 
 . 
  TextUtf8 
 
 , 
  
 Data 
  
 = 
  
 Google 
 . 
 Protobuf 
 . 
 ByteString 
 . 
 CopyFromUtf8 
 ( 
 textToInspect 
 ) 
  
 }; 
  
 var 
  
 contentItem 
  
 = 
  
 new 
  
  ContentItem 
 
  
 { 
  
 ByteItem 
  
 = 
  
 byteContentItem 
  
 }; 
  
 var 
  
 patientRule 
  
 = 
  
 new 
  
 DetectionRule 
 . 
 Types 
 . 
 HotwordRule 
  
 { 
  
 HotwordRegex 
  
 = 
  
 new 
  
 CustomInfoType 
 . 
 Types 
 . 
 Regex 
  
 { 
  
 Pattern 
  
 = 
  
 "patient" 
  
 }, 
  
 Proximity 
  
 = 
  
 new 
  
 DetectionRule 
 . 
 Types 
 . 
 Proximity 
  
 { 
  
 WindowBefore 
  
 = 
  
 10 
  
 }, 
  
 LikelihoodAdjustment 
  
 = 
  
 new 
  
 DetectionRule 
 . 
 Types 
 . 
 LikelihoodAdjustment 
  
 { 
  
 FixedLikelihood 
  
 = 
  
  Likelihood 
 
 . 
  VeryLikely 
 
  
 } 
  
 }; 
  
 var 
  
 doctorRule 
  
 = 
  
 new 
  
 DetectionRule 
 . 
 Types 
 . 
 HotwordRule 
  
 { 
  
 HotwordRegex 
  
 = 
  
 new 
  
 CustomInfoType 
 . 
 Types 
 . 
 Regex 
  
 { 
  
 Pattern 
  
 = 
  
 "doctor" 
  
 }, 
  
 Proximity 
  
 = 
  
 new 
  
 DetectionRule 
 . 
 Types 
 . 
 Proximity 
  
 { 
  
 WindowBefore 
  
 = 
  
 10 
  
 }, 
  
 LikelihoodAdjustment 
  
 = 
  
 new 
  
 DetectionRule 
 . 
 Types 
 . 
 LikelihoodAdjustment 
  
 { 
  
 FixedLikelihood 
  
 = 
  
  Likelihood 
 
 . 
  Unlikely 
 
  
 } 
  
 }; 
  
 // Construct exclusion rules 
  
 var 
  
 quasimodoRule 
  
 = 
  
 new 
  
  ExclusionRule 
 
  
 { 
  
 Dictionary 
  
 = 
  
 new 
  
 Dictionary 
  
 { 
  
 WordList 
  
 = 
  
 new 
  
 Dictionary 
 . 
 Types 
 . 
 WordList 
  
 { 
  
 Words 
  
 = 
  
 { 
  
 "Quasimodo" 
  
 } 
  
 } 
  
 }, 
  
 MatchingType 
  
 = 
  
  MatchingType 
 
 . 
  PartialMatch 
 
  
 }; 
  
 var 
  
 redactedRule 
  
 = 
  
 new 
  
  ExclusionRule 
 
  
 { 
  
 Regex 
  
 = 
  
 new 
  
 CustomInfoType 
 . 
 Types 
 . 
 Regex 
  
 { 
  
 Pattern 
  
 = 
  
 "REDACTED" 
  
 }, 
  
 MatchingType 
  
 = 
  
  MatchingType 
 
 . 
  PartialMatch 
 
  
 }; 
  
 var 
  
 infoType 
  
 = 
  
 new 
  
  InfoType 
 
  
 { 
  
 Name 
  
 = 
  
 "PERSON_NAME" 
  
 }; 
  
 var 
  
 inspectionRuleSet 
  
 = 
  
 new 
  
  InspectionRuleSet 
 
  
 { 
  
 InfoTypes 
  
 = 
  
 { 
  
 infoType 
  
 }, 
  
 Rules 
  
 = 
  
 { 
  
 new 
  
  InspectionRule 
 
  
 { 
  
 HotwordRule 
  
 = 
  
 patientRule 
  
 }, 
  
 new 
  
  InspectionRule 
 
  
 { 
  
 HotwordRule 
  
 = 
  
 doctorRule 
 }, 
  
 new 
  
  InspectionRule 
 
  
 { 
  
 ExclusionRule 
  
 = 
  
 quasimodoRule 
  
 }, 
  
 new 
  
  InspectionRule 
 
  
 { 
  
 ExclusionRule 
  
 = 
  
 redactedRule 
  
 } 
  
 } 
  
 }; 
  
 var 
  
 inspectConfig 
  
 = 
  
 new 
  
  InspectConfig 
 
  
 { 
  
 InfoTypes 
  
 = 
  
 { 
  
 infoType 
  
 }, 
  
 IncludeQuote 
  
 = 
  
 true 
 , 
  
 RuleSet 
  
 = 
  
 { 
  
 inspectionRuleSet 
  
 } 
  
 }; 
  
 var 
  
 request 
  
 = 
  
 new 
  
  InspectContentRequest 
 
  
 { 
  
 Parent 
  
 = 
  
 new 
  
  LocationName 
 
 ( 
 projectId 
 , 
  
 "global" 
 ). 
 ToString 
 (), 
  
 Item 
  
 = 
  
 contentItem 
 , 
  
 InspectConfig 
  
 = 
  
 inspectConfig 
  
 }; 
  
 var 
  
 response 
  
 = 
  
 dlp 
 . 
 InspectContent 
 ( 
 request 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Findings: {response.Result.Findings.Count}" 
 ); 
  
 foreach 
  
 ( 
 var 
  
 f 
  
 in 
  
 response 
 . 
 Result 
 . 
 Findings 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "\tQuote: " 
  
 + 
  
 f 
 . 
 Quote 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "\tInfo type: " 
  
 + 
  
 f 
 . 
  InfoType 
 
 . 
 Name 
 ); 
  
 Console 
 . 
 WriteLine 
 ( 
 "\tLikelihood: " 
  
 + 
  
 f 
 . 
  Likelihood 
 
 ); 
  
 } 
  
 return 
  
 response 
 ; 
  
 } 
 } 
 

Go

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 ( 
  
 "context" 
  
 "fmt" 
  
 "io" 
  
 dlp 
  
 "cloud.google.com/go/dlp/apiv2" 
  
 "cloud.google.com/go/dlp/apiv2/dlppb" 
 ) 
 // inspectStringMultipleRules inspects the provided text, 
 // avoiding matches specified in the exclusion list. 
 // this function implements the both exclusion and hot word rules. 
 func 
  
 inspectStringMultipleRules 
 ( 
 w 
  
 io 
 . 
 Writer 
 , 
  
 projectID 
 , 
  
 textToInspect 
  
 string 
 ) 
  
 error 
  
 { 
  
 // projectID := "my-project-id" 
  
 // textToInspect := "patient: Jane Doe" 
  
 ctx 
  
 := 
  
 context 
 . 
 Background 
 () 
  
 // Initialize a client once and reuse it to send multiple requests. Clients 
  
 // are safe to use across goroutines. When the client is no longer needed, 
  
 // call the Close method to cleanup its resources. 
  
 client 
 , 
  
 err 
  
 := 
  
 dlp 
 . 
  NewClient 
 
 ( 
 ctx 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 // Closing the client safely cleans up background resources. 
  
 defer 
  
 client 
 . 
  Close 
 
 () 
  
 // Specify the type and content to be inspected. 
  
 ContentItem 
  
 := 
  
& dlppb 
 . 
 ContentItem 
 { 
  
 DataItem 
 : 
  
& dlppb 
 . 
 ContentItem_ByteItem 
 { 
  
 ByteItem 
 : 
  
& dlppb 
 . 
 ByteContentItem 
 { 
  
 Type 
 : 
  
 dlppb 
 . 
  ByteContentItem_TEXT_UTF8 
 
 , 
  
 Data 
 : 
  
 [] 
 byte 
 ( 
 textToInspect 
 ), 
  
 }, 
  
 }, 
  
 } 
  
 // Construct the rule that adjust the likelihood of findings 
  
 // within a certain proximity of hot-word("patient"). 
  
 patientRule 
  
 := 
  
& dlppb 
 . 
 InspectionRule_HotwordRule 
 { 
  
 HotwordRule 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_HotwordRule 
 { 
  
 HotwordRegex 
 : 
  
& dlppb 
 . 
 CustomInfoType_Regex 
 { 
  
 Pattern 
 : 
  
 "patient" 
 , 
  
 }, 
  
 Proximity 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_Proximity 
 { 
  
 WindowBefore 
 : 
  
 10 
 , 
  
 }, 
  
 LikelihoodAdjustment 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_LikelihoodAdjustment 
 { 
  
 Adjustment 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood 
 { 
  
 FixedLikelihood 
 : 
  
 dlppb 
 . 
  Likelihood_VERY_LIKELY 
 
 , 
  
 }, 
  
 }, 
  
 }, 
  
 } 
  
 // Construct the rule that adjust the likelihood of findings 
  
 // within a certain proximity of hot-word("doctor"). 
  
 doctorRule 
  
 := 
  
& dlppb 
 . 
 InspectionRule_HotwordRule 
 { 
  
 HotwordRule 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_HotwordRule 
 { 
  
 HotwordRegex 
 : 
  
& dlppb 
 . 
 CustomInfoType_Regex 
 { 
  
 Pattern 
 : 
  
 "doctor" 
 , 
  
 }, 
  
 Proximity 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_Proximity 
 { 
  
 WindowBefore 
 : 
  
 10 
 , 
  
 }, 
  
 LikelihoodAdjustment 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_LikelihoodAdjustment 
 { 
  
 Adjustment 
 : 
  
& dlppb 
 . 
 CustomInfoType_DetectionRule_LikelihoodAdjustment_FixedLikelihood 
 { 
  
 FixedLikelihood 
 : 
  
 dlppb 
 . 
  Likelihood_UNLIKELY 
 
 , 
  
 }, 
  
 }, 
  
 }, 
  
 } 
  
 // Construct the exclusion rule that avoids the matches for the specified word list. 
  
 quasimodoRule 
  
 := 
  
& dlppb 
 . 
 ExclusionRule 
 { 
  
 Type 
 : 
  
& dlppb 
 . 
 ExclusionRule_Dictionary 
 { 
  
 Dictionary 
 : 
  
& dlppb 
 . 
 CustomInfoType_Dictionary 
 { 
  
 Source 
 : 
  
& dlppb 
 . 
 CustomInfoType_Dictionary_WordList_ 
 { 
  
 WordList 
 : 
  
& dlppb 
 . 
 CustomInfoType_Dictionary_WordList 
 { 
  
 Words 
 : 
  
 [] 
 string 
 { 
 "Quasimodo" 
 }, 
  
 }, 
  
 }, 
  
 }, 
  
 }, 
  
 MatchingType 
 : 
  
 dlppb 
 . 
  MatchingType_MATCHING_TYPE_PARTIAL_MATCH 
 
 , 
  
 } 
  
 // Construct the exclusion rule that avoids the matches for the specified regex pattern. 
  
 redactedRule 
  
 := 
  
& dlppb 
 . 
 ExclusionRule 
 { 
  
 Type 
 : 
  
& dlppb 
 . 
 ExclusionRule_Regex 
 { 
  
 Regex 
 : 
  
& dlppb 
 . 
 CustomInfoType_Regex 
 { 
  
 Pattern 
 : 
  
 "REDACTED" 
 , 
  
 }, 
  
 }, 
  
 MatchingType 
 : 
  
 dlppb 
 . 
  MatchingType_MATCHING_TYPE_PARTIAL_MATCH 
 
 , 
  
 } 
  
 // Construct a ruleSet that applies the rules to the PERSON_NAME infoType. 
  
 ruleSet 
  
 := 
  
& dlppb 
 . 
 InspectionRuleSet 
 { 
  
 InfoTypes 
 : 
  
 [] 
 * 
 dlppb 
 . 
 InfoType 
 { 
  
 { 
 Name 
 : 
  
 "PERSON_NAME" 
 }, 
  
 }, 
  
 Rules 
 : 
  
 [] 
 * 
 dlppb 
 . 
 InspectionRule 
 { 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 InspectionRule_HotwordRule 
 { 
 HotwordRule 
 : 
  
 doctorRule 
 . 
 HotwordRule 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 InspectionRule_HotwordRule 
 { 
 HotwordRule 
 : 
  
 patientRule 
 . 
 HotwordRule 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 InspectionRule_ExclusionRule 
 { 
 ExclusionRule 
 : 
  
 quasimodoRule 
 }}, 
  
 { 
 Type 
 : 
  
& dlppb 
 . 
 InspectionRule_ExclusionRule 
 { 
 ExclusionRule 
 : 
  
 redactedRule 
 }}, 
  
 }, 
  
 } 
  
 // Construct the configuration for the Inspect request, including the ruleSet. 
  
 inspectConfig 
  
 := 
  
& dlppb 
 . 
 InspectConfig 
 { 
  
 InfoTypes 
 : 
  
 [] 
 * 
 dlppb 
 . 
 InfoType 
 { 
  
 { 
 Name 
 : 
  
 "PERSON_NAME" 
 }, 
  
 }, 
  
 IncludeQuote 
 : 
  
 true 
 , 
  
 RuleSet 
 : 
  
 [] 
 * 
 dlppb 
 . 
 InspectionRuleSet 
 { 
  
 ruleSet 
 , 
  
 }, 
  
 } 
  
 // Create and send the request. 
  
 req 
  
 := 
  
& dlppb 
 . 
 InspectContentRequest 
 { 
  
 Parent 
 : 
  
 fmt 
 . 
 Sprintf 
 ( 
 "projects/%s/locations/global" 
 , 
  
 projectID 
 ), 
  
 Item 
 : 
  
 ContentItem 
 , 
  
 InspectConfig 
 : 
  
 inspectConfig 
 , 
  
 } 
  
 // Send the request. 
  
 resp 
 , 
  
 err 
  
 := 
  
 client 
 . 
 InspectContent 
 ( 
 ctx 
 , 
  
 req 
 ) 
  
 if 
  
 err 
  
 != 
  
 nil 
  
 { 
  
 return 
  
 err 
  
 } 
  
 // Process the results. 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Findings: %v\n" 
 , 
  
 len 
 ( 
 resp 
 . 
 Result 
 . 
 Findings 
 )) 
  
 for 
  
 _ 
 , 
  
 v 
  
 := 
  
 range 
  
 resp 
 . 
 GetResult 
 (). 
 Findings 
  
 { 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Quote: %v\n" 
 , 
  
 v 
 . 
 GetQuote 
 ()) 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Infotype Name: %v\n" 
 , 
  
 v 
 . 
 GetInfoType 
 (). 
 GetName 
 ()) 
  
 fmt 
 . 
 Fprintf 
 ( 
 w 
 , 
  
 "Likelihood: %v\n" 
 , 
  
 v 
 . 
 GetLikelihood 
 ()) 
  
 } 
  
 return 
  
 nil 
 } 
 

Java

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 com.google.cloud.dlp.v2. DlpServiceClient 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. ByteContentItem 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. ByteContentItem 
. BytesType 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. ContentItem 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. CustomInfoType 
. DetectionRule 
. HotwordRule 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. CustomInfoType 
. DetectionRule 
. LikelihoodAdjustment 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. CustomInfoType 
. DetectionRule 
. Proximity 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. CustomInfoType 
. Dictionary 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. CustomInfoType 
. Dictionary 
. WordList 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. CustomInfoType 
. Regex 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. ExclusionRule 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. Finding 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. InfoType 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. InspectConfig 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. InspectContentRequest 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. InspectContentResponse 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. InspectionRule 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. InspectionRuleSet 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. Likelihood 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. LocationName 
 
 ; 
 import 
  
 com.google.privacy.dlp.v2. MatchingType 
 
 ; 
 import 
  
 com.google.protobuf. ByteString 
 
 ; 
 import 
  
 java.io.IOException 
 ; 
 public 
  
 class 
 InspectStringMultipleRules 
  
 { 
  
 public 
  
 static 
  
 void 
  
 main 
 ( 
 String 
 [] 
  
 args 
 ) 
  
 throws 
  
 Exception 
  
 { 
  
 // TODO(developer): Replace these variables before running the sample. 
  
 String 
  
 projectId 
  
 = 
  
 "your-project-id" 
 ; 
  
 String 
  
 textToInspect 
  
 = 
  
 "patient: Jane Doe" 
 ; 
  
 inspectStringMultipleRules 
 ( 
 projectId 
 , 
  
 textToInspect 
 ); 
  
 } 
  
 // Inspects the provided text, avoiding matches specified in the exclusion list. 
  
 public 
  
 static 
  
 void 
  
 inspectStringMultipleRules 
 ( 
 String 
  
 projectId 
 , 
  
 String 
  
 textToInspect 
 ) 
  
 throws 
  
 IOException 
  
 { 
  
 // Initialize client that will be used to send requests. This client only needs to be created 
  
 // once, and can be reused for multiple requests. After completing all of your requests, call 
  
 // the "close" method on the client to safely clean up any remaining background resources. 
  
 try 
  
 ( 
  DlpServiceClient 
 
  
 dlp 
  
 = 
  
  DlpServiceClient 
 
 . 
 create 
 ()) 
  
 { 
  
 // Specify the type and content to be inspected. 
  
  ByteContentItem 
 
  
 byteItem 
  
 = 
  
  ByteContentItem 
 
 . 
 newBuilder 
 () 
  
 . 
 setType 
 ( 
  BytesType 
 
 . 
 TEXT_UTF8 
 ) 
  
 . 
  setData 
 
 ( 
  ByteString 
 
 . 
  copyFromUtf8 
 
 ( 
 textToInspect 
 )) 
  
 . 
 build 
 (); 
  
  ContentItem 
 
  
 item 
  
 = 
  
  ContentItem 
 
 . 
 newBuilder 
 (). 
 setByteItem 
 ( 
 byteItem 
 ). 
 build 
 (); 
  
 // Construct hotword rules 
  
  HotwordRule 
 
  
 patientRule 
  
 = 
  
  HotwordRule 
 
 . 
 newBuilder 
 () 
  
 . 
 setHotwordRegex 
 ( 
  Regex 
 
 . 
 newBuilder 
 (). 
  setPattern 
 
 ( 
 "patient" 
 )) 
  
 . 
 setProximity 
 ( 
  Proximity 
 
 . 
 newBuilder 
 (). 
  setWindowBefore 
 
 ( 
 10 
 )) 
  
 . 
 setLikelihoodAdjustment 
 ( 
  
  LikelihoodAdjustment 
 
 . 
 newBuilder 
 (). 
  setFixedLikelihood 
 
 ( 
  Likelihood 
 
 . 
 VERY_LIKELY 
 )) 
  
 . 
 build 
 (); 
  
  HotwordRule 
 
  
 doctorRule 
  
 = 
  
  HotwordRule 
 
 . 
 newBuilder 
 () 
  
 . 
 setHotwordRegex 
 ( 
  Regex 
 
 . 
 newBuilder 
 (). 
  setPattern 
 
 ( 
 "doctor" 
 )) 
  
 . 
 setProximity 
 ( 
  Proximity 
 
 . 
 newBuilder 
 (). 
  setWindowBefore 
 
 ( 
 10 
 )) 
  
 . 
 setLikelihoodAdjustment 
 ( 
  
  LikelihoodAdjustment 
 
 . 
 newBuilder 
 (). 
  setFixedLikelihood 
 
 ( 
  Likelihood 
 
 . 
 UNLIKELY 
 )) 
  
 . 
 build 
 (); 
  
 // Construct exclusion rules 
  
  ExclusionRule 
 
  
 quasimodoRule 
  
 = 
  
  ExclusionRule 
 
 . 
 newBuilder 
 () 
  
 . 
 setDictionary 
 ( 
  
  Dictionary 
 
 . 
 newBuilder 
 (). 
 setWordList 
 ( 
  WordList 
 
 . 
 newBuilder 
 (). 
  addWords 
 
 ( 
 "Quasimodo" 
 ))) 
  
 . 
 setMatchingType 
 ( 
  MatchingType 
 
 . 
 MATCHING_TYPE_PARTIAL_MATCH 
 ) 
  
 . 
 build 
 (); 
  
  ExclusionRule 
 
  
 redactedRule 
  
 = 
  
  ExclusionRule 
 
 . 
 newBuilder 
 () 
  
 . 
 setRegex 
 ( 
  Regex 
 
 . 
 newBuilder 
 (). 
  setPattern 
 
 ( 
 "REDACTED" 
 )) 
  
 . 
 setMatchingType 
 ( 
  MatchingType 
 
 . 
 MATCHING_TYPE_PARTIAL_MATCH 
 ) 
  
 . 
 build 
 (); 
  
 // Construct a ruleset that applies the rules to the PERSON_NAME infotype. 
  
  InspectionRuleSet 
 
  
 ruleSet 
  
 = 
  
  InspectionRuleSet 
 
 . 
 newBuilder 
 () 
  
 . 
 addInfoTypes 
 ( 
  InfoType 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "PERSON_NAME" 
 )) 
  
 . 
  addRules 
 
 ( 
  InspectionRule 
 
 . 
 newBuilder 
 (). 
 setHotwordRule 
 ( 
 patientRule 
 )) 
  
 . 
  addRules 
 
 ( 
  InspectionRule 
 
 . 
 newBuilder 
 (). 
 setHotwordRule 
 ( 
 doctorRule 
 )) 
  
 . 
  addRules 
 
 ( 
  InspectionRule 
 
 . 
 newBuilder 
 (). 
  setExclusionRule 
 
 ( 
 quasimodoRule 
 )) 
  
 . 
  addRules 
 
 ( 
  InspectionRule 
 
 . 
 newBuilder 
 (). 
  setExclusionRule 
 
 ( 
 redactedRule 
 )) 
  
 . 
 build 
 (); 
  
 // Construct the configuration for the Inspect request, including the ruleset. 
  
  InspectConfig 
 
  
 config 
  
 = 
  
  InspectConfig 
 
 . 
 newBuilder 
 () 
  
 . 
 addInfoTypes 
 ( 
  InfoType 
 
 . 
 newBuilder 
 (). 
 setName 
 ( 
 "PERSON_NAME" 
 )) 
  
 . 
  setIncludeQuote 
 
 ( 
 true 
 ) 
  
 . 
  addRuleSet 
 
 ( 
 ruleSet 
 ) 
  
 . 
 build 
 (); 
  
 // Construct the Inspect request to be sent by the client. 
  
  InspectContentRequest 
 
  
 request 
  
 = 
  
  InspectContentRequest 
 
 . 
 newBuilder 
 () 
  
 . 
 setParent 
 ( 
  LocationName 
 
 . 
 of 
 ( 
 projectId 
 , 
  
 "global" 
 ). 
 toString 
 ()) 
  
 . 
 setItem 
 ( 
 item 
 ) 
  
 . 
 setInspectConfig 
 ( 
 config 
 ) 
  
 . 
 build 
 (); 
  
 // Use the client to send the API request. 
  
  InspectContentResponse 
 
  
 response 
  
 = 
  
 dlp 
 . 
 inspectContent 
 ( 
 request 
 ); 
  
 // Parse the response and process results 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "Findings: " 
  
 + 
  
 response 
 . 
  getResult 
 
 (). 
 getFindingsCount 
 ()); 
  
 for 
  
 ( 
  Finding 
 
  
 f 
  
 : 
  
 response 
 . 
  getResult 
 
 (). 
 getFindingsList 
 ()) 
  
 { 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "\tQuote: " 
  
 + 
  
 f 
 . 
 getQuote 
 ()); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "\tInfo type: " 
  
 + 
  
 f 
 . 
 getInfoType 
 (). 
 getName 
 ()); 
  
 System 
 . 
 out 
 . 
 println 
 ( 
 "\tLikelihood: " 
  
 + 
  
 f 
 . 
 getLikelihood 
 ()); 
  
 } 
  
 } 
  
 } 
 } 
 

Node.js

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  // Imports the Google Cloud Data Loss Prevention library 
 const 
  
 DLP 
  
 = 
  
 require 
 ( 
 ' @google-cloud/dlp 
' 
 ); 
 // Instantiates a client 
 const 
  
 dlp 
  
 = 
  
 new 
  
 DLP 
 . 
  DlpServiceClient 
 
 (); 
 // The project ID to run the API call under 
 // const projectId = 'my-project'; 
 // The string to inspect 
 // const string = 'patient: Jane Doe'; 
 async 
  
 function 
  
 inspectStringMultipleRules 
 () 
  
 { 
  
 // Construct item to inspect 
  
 const 
  
 item 
  
 = 
  
 { 
 value 
 : 
  
 string 
 }; 
  
 // Construct hotword rules 
  
 const 
  
 patientRule 
  
 = 
  
 { 
  
 hotwordRegex 
 : 
  
 { 
 pattern 
 : 
  
 'patient' 
 }, 
  
 proximity 
 : 
  
 { 
 windowBefore 
 : 
  
 10 
 }, 
  
 likelihoodAdjustment 
 : 
  
 { 
  
 fixedLikelihood 
 : 
  
 DLP 
 . 
 protos 
 . 
 google 
 . 
 privacy 
 . 
 dlp 
 . 
 v2 
 . 
  Likelihood 
 
 . 
  VERY_LIKELY 
 
 , 
  
 }, 
  
 }; 
  
 const 
  
 doctorRule 
  
 = 
  
 { 
  
 hotwordRegex 
 : 
  
 { 
 pattern 
 : 
  
 'doctor' 
 }, 
  
 proximity 
 : 
  
 { 
 windowBefore 
 : 
  
 10 
 }, 
  
 likelihoodAdjustment 
 : 
  
 { 
  
 fixedLikelihood 
 : 
  
 DLP 
 . 
 protos 
 . 
 google 
 . 
 privacy 
 . 
 dlp 
 . 
 v2 
 . 
  Likelihood 
 
 . 
  UNLIKELY 
 
 , 
  
 }, 
  
 }; 
  
 // Construct exclusion rules 
  
 const 
  
 quasimodoRule 
  
 = 
  
 { 
  
 dictionary 
 : 
  
 { 
 wordList 
 : 
  
 { 
 words 
 : 
  
 [ 
 'quasimodo' 
 ]}}, 
  
 matchingType 
 : 
  
 DLP 
 . 
 protos 
 . 
 google 
 . 
 privacy 
 . 
 dlp 
 . 
 v2 
 . 
  MatchingType 
 
  
 . 
  MATCHING_TYPE_PARTIAL_MATCH 
 
 , 
  
 }; 
  
 const 
  
 redactedRule 
  
 = 
  
 { 
  
 regex 
 : 
  
 { 
 pattern 
 : 
  
 'REDACTED' 
 }, 
  
 matchingType 
 : 
  
 DLP 
 . 
 protos 
 . 
 google 
 . 
 privacy 
 . 
 dlp 
 . 
 v2 
 . 
  MatchingType 
 
  
 . 
  MATCHING_TYPE_PARTIAL_MATCH 
 
 , 
  
 }; 
  
 // The infoTypes of information to match 
  
 const 
  
 infoTypes 
  
 = 
  
 [{ 
 name 
 : 
  
 'PERSON_NAME' 
 }]; 
  
 // Construct a ruleset that applies the rules to the PERSON_NAME infotype. 
  
 const 
  
 ruleSet 
  
 = 
  
 [ 
  
 { 
  
 infoTypes 
 : 
  
 infoTypes 
 , 
  
 rules 
 : 
  
 [ 
  
 { 
 hotwordRule 
 : 
  
 patientRule 
 }, 
  
 { 
 hotwordRule 
 : 
  
 doctorRule 
 }, 
  
 { 
 exclusionRule 
 : 
  
 quasimodoRule 
 }, 
  
 { 
 exclusionRule 
 : 
  
 redactedRule 
 }, 
  
 ], 
  
 }, 
  
 ]; 
  
 // Construct the configuration for the Inspect request, including the ruleset. 
  
 const 
  
 inspectConfig 
  
 = 
  
 { 
  
 infoTypes 
 : 
  
 infoTypes 
 , 
  
 ruleSet 
 : 
  
 ruleSet 
 , 
  
 includeQuote 
 : 
  
 true 
 , 
  
 }; 
  
 // Construct the Inspect request to be sent by the client. 
  
 const 
  
 request 
  
 = 
  
 { 
  
 parent 
 : 
  
 `projects/ 
 ${ 
 projectId 
 } 
 /locations/global` 
 , 
  
 inspectConfig 
 : 
  
 inspectConfig 
 , 
  
 item 
 : 
  
 item 
 , 
  
 }; 
  
 // Use the client to send the API request. 
  
 const 
  
 [ 
 response 
 ] 
  
 = 
  
 await 
  
 dlp 
 . 
 inspectContent 
 ( 
 request 
 ); 
  
 // Print findings. 
  
 const 
  
 findings 
  
 = 
  
 response 
 . 
 result 
 . 
 findings 
 ; 
  
 if 
  
 ( 
 findings 
 . 
 length 
 > 
 0 
 ) 
  
 { 
  
 console 
 . 
 log 
 ( 
 `Findings: 
 ${ 
 findings 
 . 
 length 
 } 
 \n` 
 ); 
  
 findings 
 . 
 forEach 
 ( 
 finding 
  
 = 
>  
 { 
  
 console 
 . 
 log 
 ( 
 `InfoType: 
 ${ 
 finding 
 . 
 infoType 
 . 
 name 
 } 
 ` 
 ); 
  
 console 
 . 
 log 
 ( 
 `\tQuote: 
 ${ 
 finding 
 . 
 quote 
 } 
 ` 
 ); 
  
 console 
 . 
 log 
 ( 
 `\tLikelihood: 
 ${ 
 finding 
 . 
 likelihood 
 } 
 \n` 
 ); 
  
 }); 
  
 } 
  
 else 
  
 { 
  
 console 
 . 
 log 
 ( 
 'No findings.' 
 ); 
  
 } 
 } 
 inspectStringMultipleRules 
 (); 
 

PHP

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  use Google\Cloud\Dlp\V2\Client\DlpServiceClient; 
 use Google\Cloud\Dlp\V2\ContentItem; 
 use Google\Cloud\Dlp\V2\CustomInfoType\DetectionRule\HotwordRule; 
 use Google\Cloud\Dlp\V2\CustomInfoType\DetectionRule\LikelihoodAdjustment; 
 use Google\Cloud\Dlp\V2\CustomInfoType\DetectionRule\Proximity; 
 use Google\Cloud\Dlp\V2\CustomInfoType\Dictionary; 
 use Google\Cloud\Dlp\V2\CustomInfoType\Dictionary\WordList; 
 use Google\Cloud\Dlp\V2\CustomInfoType\Regex; 
 use Google\Cloud\Dlp\V2\ExclusionRule; 
 use Google\Cloud\Dlp\V2\InfoType; 
 use Google\Cloud\Dlp\V2\InspectConfig; 
 use Google\Cloud\Dlp\V2\InspectContentRequest; 
 use Google\Cloud\Dlp\V2\InspectionRule; 
 use Google\Cloud\Dlp\V2\InspectionRuleSet; 
 use Google\Cloud\Dlp\V2\Likelihood; 
 use Google\Cloud\Dlp\V2\MatchingType; 
 /** 
 * Inspect a string for sensitive data by using multiple rules 
 * Illustrates applying both exclusion and hotword rules. This snippet's rule set includes both hotword rules and dictionary and regex exclusion rules. Notice that the four rules are specified in an array within the rules element. 
 * 
 * @param string $projectId         The Google Cloud project id to use as a parent resource. 
 * @param string $textToInspect     The string to inspect. 
 */ 
 function inspect_string_multiple_rules( 
 // TODO(developer): Replace sample parameters before running the code. 
 string $projectId, 
 string $textToInspect = 'patient: Jane Doe' 
 ): void { 
 // Instantiate a client. 
 $dlp = new DlpServiceClient(); 
 $parent = "projects/$projectId/locations/global"; 
 // Specify what content you want the service to Inspect. 
 $item = (new ContentItem()) 
 ->setValue($textToInspect); 
 // Construct hotword rules 
 $patientRule = (new HotwordRule()) 
 ->setHotwordRegex((new Regex()) 
 ->setPattern('patient')) 
 ->setProximity((new Proximity()) 
 ->setWindowBefore(10)) 
 ->setLikelihoodAdjustment((new LikelihoodAdjustment()) 
 ->setFixedLikelihood(Likelihood::VERY_LIKELY)); 
 $doctorRule = (new HotwordRule()) 
 ->setHotwordRegex((new Regex()) 
 ->setPattern('doctor')) 
 ->setProximity((new Proximity()) 
 ->setWindowBefore(10)) 
 ->setLikelihoodAdjustment((new LikelihoodAdjustment()) 
 ->setFixedLikelihood(Likelihood::VERY_UNLIKELY)); 
 // Construct exclusion rules 
 $wordList = (new Dictionary()) 
 ->setWordList((new WordList()) 
 ->setWords(['Quasimodo'])); 
 $quasimodoRule = (new ExclusionRule()) 
 ->setMatchingType(MatchingType::MATCHING_TYPE_PARTIAL_MATCH) 
 ->setDictionary($wordList); 
 $redactedRule = (new ExclusionRule()) 
 ->setMatchingType(MatchingType::MATCHING_TYPE_PARTIAL_MATCH) 
 ->setRegex((new Regex()) 
 ->setPattern('REDACTED')); 
 // Specify the exclusion rule and build-in info type the inspection will look for. 
 $personName = (new InfoType()) 
 ->setName('PERSON_NAME'); 
 $inspectionRuleSet = (new InspectionRuleSet()) 
 ->setInfoTypes([$personName]) 
 ->setRules([ 
 (new InspectionRule()) 
 ->setHotwordRule($patientRule), 
 (new InspectionRule()) 
 ->setHotwordRule($doctorRule), 
 (new InspectionRule()) 
 ->setExclusionRule($quasimodoRule), 
 (new InspectionRule()) 
 ->setExclusionRule($redactedRule), 
 ]); 
 // Construct the configuration for the Inspect request, including the ruleset. 
 $inspectConfig = (new InspectConfig()) 
 ->setInfoTypes([$personName]) 
 ->setIncludeQuote(true) 
 ->setRuleSet([$inspectionRuleSet]); 
 // Run request 
 $inspectContentRequest = (new InspectContentRequest()) 
 ->setParent($parent) 
 ->setInspectConfig($inspectConfig) 
 ->setItem($item); 
 $response = $dlp->inspectContent($inspectContentRequest); 
 // Print the results 
 $findings = $response->getResult()->getFindings(); 
 if (count($findings) == 0) { 
 printf('No findings.' . PHP_EOL); 
 } else { 
 printf('Findings:' . PHP_EOL); 
 foreach ($findings as $finding) { 
 printf('  Quote: %s' . PHP_EOL, $finding->getQuote()); 
 printf('  Info type: %s' . PHP_EOL, $finding->getInfoType()->getName()); 
 printf('  Likelihood: %s' . PHP_EOL, Likelihood::name($finding->getLikelihood())); 
 } 
 } 
 } 
 

Python

To learn how to install and use the client library for Sensitive Data Protection, see Sensitive Data Protection client libraries .

To authenticate to Sensitive Data Protection, set up Application Default Credentials. For more information, see Set up authentication for a local development environment .

  import 
  
 google.cloud.dlp 
 def 
  
 inspect_string_multiple_rules 
 ( 
 project 
 : 
 str 
 , 
 content_string 
 : 
 str 
 ) 
 - 
> None 
 : 
  
 """Uses the Data Loss Prevention API to modify likelihood for matches on 
 PERSON_NAME combining multiple hotword and exclusion rules. 
 Args: 
 project: The Google Cloud project id to use as a parent resource. 
 content_string: The string to inspect. 
 Returns: 
 None; the response from the API is printed to the terminal. 
 """ 
 # Instantiate a client. 
 dlp 
 = 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  DlpServiceClient 
 
 () 
 # Construct hotword rules 
 patient_rule 
 = 
 { 
 "hotword_regex" 
 : 
 { 
 "pattern" 
 : 
 "patient" 
 }, 
 "proximity" 
 : 
 { 
 "window_before" 
 : 
 10 
 }, 
 "likelihood_adjustment" 
 : 
 { 
 "fixed_likelihood" 
 : 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  Likelihood 
 
 . 
 VERY_LIKELY 
 }, 
 } 
 doctor_rule 
 = 
 { 
 "hotword_regex" 
 : 
 { 
 "pattern" 
 : 
 "doctor" 
 }, 
 "proximity" 
 : 
 { 
 "window_before" 
 : 
 10 
 }, 
 "likelihood_adjustment" 
 : 
 { 
 "fixed_likelihood" 
 : 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  Likelihood 
 
 . 
 UNLIKELY 
 }, 
 } 
 # Construct exclusion rules 
 quasimodo_rule 
 = 
 { 
 "dictionary" 
 : 
 { 
 "word_list" 
 : 
 { 
 "words" 
 : 
 [ 
 "quasimodo" 
 ]}}, 
 "matching_type" 
 : 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  MatchingType 
 
 . 
 MATCHING_TYPE_PARTIAL_MATCH 
 , 
 } 
 redacted_rule 
 = 
 { 
 "regex" 
 : 
 { 
 "pattern" 
 : 
 "REDACTED" 
 }, 
 "matching_type" 
 : 
 google 
 . 
 cloud 
 . 
  dlp_v2 
 
 . 
  MatchingType 
 
 . 
 MATCHING_TYPE_PARTIAL_MATCH 
 , 
 } 
 # Construct the rule set, combining the above rules 
 rule_set 
 = 
 [ 
 { 
 "info_types" 
 : 
 [{ 
 "name" 
 : 
 "PERSON_NAME" 
 }], 
 "rules" 
 : 
 [ 
 { 
 "hotword_rule" 
 : 
 patient_rule 
 }, 
 { 
 "hotword_rule" 
 : 
 doctor_rule 
 }, 
 { 
 "exclusion_rule" 
 : 
 quasimodo_rule 
 }, 
 { 
 "exclusion_rule" 
 : 
 redacted_rule 
 }, 
 ], 
 } 
 ] 
 # Construct the configuration dictionary 
 inspect_config 
 = 
 { 
 "info_types" 
 : 
 [{ 
 "name" 
 : 
 "PERSON_NAME" 
 }], 
 "rule_set" 
 : 
 rule_set 
 , 
 "include_quote" 
 : 
 True 
 , 
 } 
 # Construct the `item`. 
 item 
 = 
 { 
 "value" 
 : 
 content_string 
 } 
 # Convert the project id into a full resource id. 
 parent 
 = 
 f 
 "projects/ 
 { 
 project 
 } 
 " 
 # Call the API. 
 response 
 = 
 dlp 
 . 
  inspect_content 
 
 ( 
 request 
 = 
 { 
 "parent" 
 : 
 parent 
 , 
 "inspect_config" 
 : 
 inspect_config 
 , 
 "item" 
 : 
 item 
 } 
 ) 
 # Print out the results. 
 if 
 response 
 . 
 result 
 . 
 findings 
 : 
 for 
 finding 
 in 
 response 
 . 
 result 
 . 
 findings 
 : 
 print 
 ( 
 f 
 "Quote: 
 { 
 finding 
 . 
 quote 
 } 
 " 
 ) 
 print 
 ( 
 f 
 "Info type: 
 { 
 finding 
 . 
 info_type 
 . 
 name 
 } 
 " 
 ) 
 print 
 ( 
 f 
 "Likelihood: 
 { 
 finding 
 . 
 likelihood 
 } 
 " 
 ) 
 else 
 : 
 print 
 ( 
 "No findings." 
 ) 
 

What's next

To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser .

Create a Mobile Website
View Site in Mobile | Classic
Share by: