/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠReg ents Ġof Ġthe ĠUniversity Ġof ĠMin nes ota . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġedu . umn . bio med ic us . sh Ċ Ċ import Ġedu . umn . bio med ic us . annotations . Setting Ċ import Ġedu . umn . bio med ic us . common . Sequence Detector Ċ import Ġedu . umn . bio med ic us . dependencies Ċ import Ġedu . umn . bio med ic us . exc . Bio med ic us Exception Ċ import Ġedu . umn . bio med ic us . family . Relative Ċ import Ġedu . umn . bio med ic us . framework . Search Expr Ċ import Ġedu . umn . bio med ic us . framework . Search Expr Factory Ċ import Ġedu . umn . bio med ic us . parsing . Dependency Ċ import Ġedu . umn . bio med ic us . parsing . U DR el ation Ċ import Ġedu . umn . bio med ic us . parsing . find Head Ċ import Ġedu . umn . bio med ic us . sections . Section Ċ import Ġedu . umn . bio med ic us . sections . Section Content Ċ import Ġedu . umn . bio med ic us . sections . Section Header Ċ import Ġedu . umn . bio med ic us . sentences . Sentence Ċ import Ġedu . umn . bio med ic us . token ization . Parse Token Ċ import Ġedu . umn . bio med ic us . token ization . Token Ċ import Ġedu . umn . nlp engine .* Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . nio . file . Path Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ class ĠSocial History Module Ġ: ĠSystem Module () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Candidate >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol C ue >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Candidate >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug C ue >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Candidate >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine C ue >() ĊĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Re levant >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Unit >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Amount >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Frequency >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Temporal >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Type >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Status >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Al co hol Method >() ĊĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Re levant >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Unit >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Amount >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Frequency >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Temporal >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Type >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Status >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Dr ug Method >() ĊĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Re levant >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Unit >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Amount >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Frequency >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Temporal >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Type >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Status >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < N ic ot ine Method >() ĊĊĠĠĠĠĠĠĠ Ġadd Label Class < Usage Frequency Phrase >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Usage Frequency >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Usage Status >() ĊĠĠĠĠĠĠĠ Ġadd Label Class < Generic Method Phrase >() ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġsocial Ġhistory Ġcandidate Ġfor Ġal co hol Ġusage . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠAl co hol Candidate ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ġ{ ĊĠĠĠ Ġconstructor ( text Range : ĠText Range ) Ġ: Ġthis ( text Range . startIndex , Ġtext Range . end Index ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġword Ġthat Ġindicates Ġa Ġsentence Ġis Ġan Ġal co hol Ġsocial Ġhistory Ġcandidate . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠAl co hol C ue ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ċ Ċ /** Ċ Ġ* ĠA Ġsocial Ġhistory Ġcandidate Ġfor Ġdrug Ġusage . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠDr ug Candidate ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ġ{ ĊĠĠĠ Ġconstructor ( text Range : ĠText Range ) Ġ: Ġthis ( text Range . startIndex , Ġtext Range . end Index ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġword Ġthat Ġindicates Ġa Ġsentence Ġis Ġa Ġdrug Ġsocial Ġhistory Ġcandidate . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠDr ug C ue ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ċ Ċ /** Ċ Ġ* ĠA Ġsocial Ġhistory Ġcandidate Ġfor Ġnic ot ine Ġusage . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠN ic ot ine Candidate ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠstartIndex : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġend Index : ĠInt Ċ ) Ġ: ĠLabel () Ġ{ ĊĠĠĠ Ġconstructor ( text Range : ĠText Range ) Ġ: Ġthis ( text Range . startIndex , Ġtext Range . end Index ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġword Ġthat Ġindicates Ġa Ġsentence Ġis Ġa Ġnic ot ine Ġsocial Ġhistory Ġcandidate . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠN ic ot ine C ue ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠstartIndex : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġend Index : ĠInt Ċ ) Ġ: ĠLabel () Ċ Ċ /** Ċ Ġ* ĠA Ġgeneral Ġknown Ġusage Ġfrequency Ġphrase Ġthat Ġcould Ġpotentially Ġapply Ġto Ġany Ġsocial Ġhistory Ġusage Ċ Ġ* Ġtype . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠUsage Frequency Phrase ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval ĠstartIndex : ĠInt , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġend Index : ĠInt Ċ ) Ġ: ĠLabel () Ċ Ċ /** Ċ Ġ* ĠA Ġgeneral Ġusage Ġfrequency Ġthat Ġcould Ġpotentially Ġapply Ġto Ġany Ġsocial Ġhistory Ġusage Ġtype . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠUsage Frequency ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ġ{ ĊĠĠĠ Ġconstructor ( text Range : ĠText Range ) Ġ: Ġthis ( text Range . startIndex , Ġtext Range . end Index ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġgeneral Ġusage Ġstatus Ġthat Ġcould Ġpotentially Ġapply Ġto Ġany Ġsocial Ġhistory Ġtype . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠUsage Status ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ċ Ċ /** Ċ Ġ* ĠA Ġgeneral Ġmethod Ġphrase Ġthat Ġcould Ġpotentially Ġapply Ġto Ġany Ġsocial Ġhistory Ġmethod . Ċ Ġ*/ Ċ @ Label Metadata ( classpath Ġ= Ġ" bio med ic us . v 2 ", Ġdistinct Ġ= Ġtrue ) Ċ data Ġclass ĠGeneric Method Phrase ( override Ġval ĠstartIndex : ĠInt , Ġoverride Ġval Ġend Index : ĠInt ) Ġ: ĠLabel () Ċ Ċ internal Ġval Ġheaders Ġ= ĠSequence Detector ( ĊĠĠĠĠĠĠĠ ĠlistOf (" risk ", Ġ" factor "), ĊĠĠĠĠĠĠĠ ĠlistOf (" present ", Ġ" ill ness "), ĊĠĠĠĠĠĠĠ ĠlistOf (" card io vas c ular ", Ġ" risk ", Ġ" analysis "), ĊĠĠĠĠĠĠĠ ĠlistOf (" history "), ĊĠĠĠĠĠĠĠ ĠlistOf (" compl aint "), ĊĠĠĠĠĠĠĠ ĠlistOf (" hab its "), ĊĠĠĠĠĠĠĠ ĠlistOf (" subject iv "), ĊĠĠĠĠĠĠĠ ĠlistOf (" all erg "), ĊĠĠĠĠĠĠĠ ĠlistOf (" to bac co ") Ċ ) Ġ{ Ġa : ĠString , Ġb : ĠToken Ġ-> Ġb . text . startsWith ( a , Ġtrue ) Ġ} Ċ Ċ internal Ġval Ġheaders Exact Ġ= ĠSequence Detector ( ĊĠĠĠĠĠĠĠ ĠlistOf (" ES RD "), ĊĠĠĠĠĠĠĠ ĠlistOf (" SH "), ĊĠĠĠĠĠĠĠ ĠlistOf (" SH X ") Ċ ) Ġ{ Ġa : ĠString , Ġb : ĠToken Ġ-> Ġb . text . content Equals ( a ) Ġ} Ċ Ċ internal Ġval Ġtoken StartsWith : Ġ( String , ĠToken ) Ġ-> ĠBoolean Ġ= Ġ{ Ġa , Ġb : ĠToken Ġ-> ĊĠĠĠ Ġb . text . startsWith ( a , Ġtrue ) Ċ } Ċ Ċ internal Ġval Ġtoken Text Equals : Ġ( String , ĠToken ) Ġ-> ĠBoolean Ġ= Ġ{ Ġa , Ġb : ĠToken Ġ-> ĊĠĠĠ Ġb . text . compareTo ( a , Ġtrue ) Ġ== Ġ 0 Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġmodels Ġfor Ġthe Ġcandidate Ġdetector s Ġand Ġgeneral Ġsocial Ġhistory Ġtasks . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠC andidate Detection Rules Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Setting (" sh . al co hol . candidate C ues . as Data Path ") Ġal co hol C ue Path : ĠPath , ĊĠĠĠĠĠĠĠ Ġ@ Setting (" sh . al co hol . cue Ignore . as Data Path ") Ġal co hol Ignore Path : ĠPath , ĊĠĠĠĠĠĠĠ Ġ@ Setting (" sh . al co hol . non al co h olic Dr inks . as Data Path ") Ġnon al co h olic Dr inks Path : ĠPath , ĊĠĠĠĠĠĠĠ Ġ@ Setting (" sh . drug s . candidate C ues . as Data Path ") Ġdrug C ue Path : ĠPath , ĊĠĠĠĠĠĠĠ Ġ@ Setting (" sh . nic ot ine . candidate C ues . as Data Path ") Ġnic ot ine C ue Path : ĠPath Ċ ) Ġ{ ĊĠĠĠ Ġval Ġal co hol C ue Detector : ĠSequence Detector < String , ĠToken > ĊĊĠĠĠ Ġval Ġnon al co h olic Dr inks Detector : ĠSequence Detector < String , ĠToken > ĊĊĠĠĠ Ġval Ġal co hol Ignore Detector : ĠSequence Detector < String , ĠToken > ĊĊĠĠĠ Ġval Ġdrug C ue Detector : ĠSequence Detector < String , ĠToken > ĊĊĠĠĠ Ġval Ġnic ot ine C ue Detector : ĠSequence Detector < String , ĠToken > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Loading Ġsocial Ġhistory Ġcandidate Ġdetection Ġrule Ġset .") ĊĊĠĠĠĠĠĠĠ Ġal co hol C ue Detector Ġ= ĠSequence Detector . load FromFile ( al co hol C ue Path , Ġtoken StartsWith ) ĊĠĠĠĠĠĠĠ Ġal co hol Ignore Detector Ġ= ĠSequence Detector . load FromFile ( al co hol Ignore Path , Ġtoken StartsWith ) ĊĠĠĠĠĠĠĠ Ġnon al co h olic Dr inks Detector Ġ= ĠSequence Detector . load FromFile ( non al co h olic Dr inks Path , Ġtoken StartsWith ) ĊĊĠĠĠĠĠĠĠ Ġdrug C ue Detector Ġ= ĠSequence Detector . load FromFile ( drug C ue Path , Ġtoken StartsWith ) ĊĊĠĠĠĠĠĠĠ Ġnic ot ine C ue Detector Ġ= ĠSequence Detector . load FromFile ( nic ot ine C ue Path , Ġtoken StartsWith ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Candidate Detection Rules :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDetect s Ġcandidate Ġsentences Ġwhich Ġmay Ġhave Ġusage Ġfor Ġal co hol , Ġdrug s , Ġand Ġnic ot ine . Ċ Ġ*/ Ċ class ĠSocial History Candidate Detector ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġal co hol Detector : ĠSequence Detector < String , ĠToken >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnon al co h olic Detector : ĠSequence Detector < String , ĠToken >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġal co hol Ignore Detector : ĠSequence Detector < String , ĠToken >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdrug Detector : ĠSequence Detector < String , ĠToken >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġnic ot ine Detector : ĠSequence Detector < String , ĠToken > Ċ ) Ġ: ĠDocument Task Ġ{ ĊĊĠĠĠ Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcandidate Detection Rules : ĠC andidate Detection Rules ĊĠĠĠ Ġ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal co hol Detector Ġ= Ġcandidate Detection Rules . al co hol C ue Detector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnon al co h olic Detector Ġ= Ġcandidate Detection Rules . non al co h olic Dr inks Detector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal co hol Ignore Detector Ġ= Ġcandidate Detection Rules . al co hol Ignore Detector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrug Detector Ġ= Ġcandidate Detection Rules . drug C ue Detector , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine Detector Ġ= Ġcandidate Detection Rules . nic ot ine C ue Detector ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsections Ġ= Ġdocument . label Index < Section >() ĊĠĠĠĠĠĠĠ Ġval Ġsection Contents Ġ= Ġdocument . label Index < Section Content >() ĊĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= Ġdocument . label Index < Sentence >() ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġdocument . label Index < Parse Token >() ĊĠĠĠĠĠĠĠ Ġval Ġrel atives Ġ= Ġdocument . label Index < Relative >() ĊĊĠĠĠĠĠĠĠ Ġval Ġal co hol Candidate Label er Ġ= Ġdocument . label er < Al co hol Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġal co hol C ue Label er Ġ= Ġdocument . label er < Al co hol C ue >() ĊĊĠĠĠĠĠĠĠ Ġval Ġdrug Candidate Label er Ġ= Ġdocument . label er < Dr ug Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġdrug C ue Label er Ġ= Ġdocument . label er < Dr ug C ue >() ĊĊĠĠĠĠĠĠĠ Ġval Ġnic ot ine Candidate Label er Ġ= Ġdocument . label er < N ic ot ine Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġnic ot ine C ue Label er Ġ= Ġdocument . label er < N ic ot ine C ue >() ĊĊĠĠĠĠĠĠĠ Ġdocument . label Index < Section Header >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Tokens Ġ= Ġtokens . inside ( it ). asList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders . matches ( header Tokens ) Ġ!= Ġnull Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Exact . matches ( header Tokens ) Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsection Ġ= Ġsections . containing ( it ). first () Ġ?: Ġreturn @ forEach ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= Ġsection Contents . inside ( section ). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠBio med ic us Exception (" No Ġcontents Ġfor Ġsection : Ġ$ section ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentences . inside ( contents ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġdocument . text [ it . end Index Ġ- Ġ 1 ] Ġ!= Ġ':' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġrel atives . inside ( it ). isEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġsentence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsentence Tokens Ġ= Ġtokens . inside ( sentence ). asList () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal co hol Detector . detect All ( sentence Tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġal co hol Matches Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnon al co h olic Matches Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnon al co h olic Detector . detect All ( sentence Tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( non al co h olic Matches . isNotEmpty ()) Ġreturn @ let ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġal co hol Ig no res Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal co hol Ignore Detector . detect All ( sentence Tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( al co hol Ig no res . isNotEmpty ()) Ġreturn @ let ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal co hol Candidate Label er . add ( Al co hol Candidate ( sentence )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( match Ġin Ġal co hol Matches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġal co hol C ue Label er . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAl co hol C ue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ match . first ]. startIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ match . last ]. end Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrug Matches Ġ= Ġdrug Detector . detect All ( sentence Tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drug Matches . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrug Candidate Label er . add ( Dr ug Candidate ( sentence )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( match Ġin Ġdrug Matches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrug C ue Label er . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDr ug C ue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ match . first ]. startIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ match . last ]. end Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatches Ġ= Ġnic ot ine Detector . detect All ( sentence Tokens ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( matches . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine Candidate Label er . add ( N ic ot ine Candidate ( sentence )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( match Ġin Ġmatches ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine C ue Label er . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠN ic ot ine C ue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ match . first ]. startIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ match . last ]. end Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠGeneric Ġusage Ġfrequency Ġphrases Ġmodel . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠUsage Frequency Ph rases Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġ@ Setting (" sh . usage Frequency Ph rases . as Data Path ") Ġpath : ĠPath Ċ ) Ġ{ ĊĠĠĠ Ġval Ġdetector Ġ= ĠSequence Detector . load FromFile ( path ) Ġ{ Ġa , Ġb : ĠToken Ġ-> ĊĠĠĠĠĠĠĠ Ġb . text . compareTo ( a , Ġtrue ) Ġ== Ġ 0 ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDetect s Ġcertain Ġconcrete Ġusage Ġfrequency Ġphrases Ġfrom Ġa Ġdictionary Ġof Ġknown Ġphrases Ġto Ġbe Ġused Ġin Ċ Ġ* Ġthe Ġlabel ing Ġof Ġgeneric Ġusage Ġfrequencies . Ċ Ġ*/ Ċ class ĠUsage Frequency Phrase Detector Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġusage Frequency Ph rases : ĠUsage Frequency Ph rases Ċ ) Ġ: ĠDocument Task Ġ{ ĊĠĠĠ Ġval Ġdetector Ġ= Ġusage Frequency Ph rases . detector ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= Ġdocument . label Index < Sentence >() ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġdocument . label Index < Parse Token >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlabel er Ġ= Ġdocument . label er < Usage Frequency Phrase >() ĊĊĠĠĠĠĠĠĠ Ġval Ġnic ot ine Candidates Ġ= Ġdocument . label Index < N ic ot ine Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġal co hol Candidates Ġ= Ġdocument . label Index < Al co hol Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġdrug Candidates Ġ= Ġdocument . label Index < Dr ug Candidate >() ĊĊĠĠĠĠĠĠĠ Ġsentences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine Candidates . contains Span ( it ) Ġ|| Ġal co hol Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġdrug Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtokens . inside ( it ). asList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġsentence Tokens Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . detect All ( sentence Tokens ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel er . add ( Usage Frequency Phrase ( sentence Tokens [ it . first ]. startIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ it . last ]. end Index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġusage Ġfrequency Ġt age x Ġpattern . Ċ Ġ*/ Ċ @ Singleton Ċ data Ġclass ĠUsage Frequency Pattern ( val Ġsearch Expr : ĠSearch Expr ) Ġ{ ĊĠĠĠ Ġ@ Inject Ġconstructor ( search Expr Factory : ĠSearch Expr Factory ) Ġ: Ġthis ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch Expr Factory . parse ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Ċ [ ? Quant ifier ] ĠParse Token < getText =" times " | i " x "> Ġ(( Parse Token < getText =" a " |" per " |" /"> Ġ-> )? ĠTimeUnit Ġ| Ġ-> ĠTime Frequency Unit ) Ġ| Ċ ([ ? Quant ifier ] Ġ-> ĠTimeUnit Ġ-> )? Ġ[ ? Parse Token < getText =" per " |" /"> ] Ġ-> ĠTimeUnit Ġ| Ċ [ ? Parse Token < getText =" per " |" every "> ] Ġ(-> ĠQuant ifier )? Ġ-> ĠTimeUnit Ġ| Ċ [ ? Parse Token < getText =" a "> ] Ġ-> ĠTimeUnit Ġ| Ċ [ ? Usage Frequency Phrase ] Ġ| Ċ [ ? Time Frequency Unit ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠDetect s Ġ[ Usage Frequency ], Ġgeneric Ġusage Ġfrequency Ġphrases Ġthat Ġcould Ġapply Ġto Ġany Ġsocial Ġhistory Ċ Ġ* Ġtype . Ċ Ġ*/ Ċ class ĠUsage Frequency Detector ( private Ġval Ġexpr : ĠSearch Expr ) Ġ: ĠDocument Task Ġ{ ĊĠĠĠ Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusage Frequency Pattern : ĠUsage Frequency Pattern ĊĠĠĠ Ġ) Ġ: Ġthis ( usage Frequency Pattern . search Expr ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= Ġdocument . label Index < Sentence >() ĊĊĠĠĠĠĠĠĠ Ġval Ġnic ot ine Candidates Ġ= Ġdocument . label Index < N ic ot ine Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġal co hol Candidates Ġ= Ġdocument . label Index < Al co hol Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġdrug Candidates Ġ= Ġdocument . label Index < Dr ug Candidate >() ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch er Ġ= Ġexpr . create Searcher ( document ) ĊĠĠĠĠĠĠĠ Ġval Ġlabel er Ġ= Ġdocument . label er < Usage Frequency >() ĊĊĠĠĠĠĠĠĠ Ġsentences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine Candidates . contains Span ( it ) Ġ|| Ġal co hol Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġdrug Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( search er . search ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel er . add ( Usage Frequency ( search er . begin , Ġsearch er . end )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġmodel Ġfor Ġgeneric Ġusage Ġstatus Ġphrases . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠUsage Status Ph rases ( val Ġdetector : ĠSequence Detector < String , ĠToken >) Ġ{ ĊĠĠĠ Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Setting (" sh . status Ph rases . as Data Path ") Ġpath : ĠPath ĊĠĠĠ Ġ) Ġ: Ġthis ( Sequence Detector . load FromFile ( path , Ġtoken Text Equals )) Ċ } Ċ Ċ /** Ċ Ġ* ĠDetect s Ġ[ Usage Status ], Ġusage Ġstatus Ġphrases Ġthat Ġcould Ġapply Ġto Ġany Ġsocial Ġhistory Ġusage Ġtype . Ċ Ġ*/ Ċ class ĠUsage Status Detector ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdetector : ĠSequence Detector < String , ĠToken > Ċ ) Ġ: ĠDocument Task Ġ{ ĊĠĠĠ Ġ@ Inject Ġinternal Ġconstructor ( ph rases : ĠUsage Status Ph rases ) Ġ: Ġthis ( ph rases . detector ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= Ġdocument . label Index < Sentence >() ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġdocument . label Index < Parse Token >() ĊĊĠĠĠĠĠĠĠ Ġval Ġnic ot ine Candidates Ġ= Ġdocument . label Index < N ic ot ine Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġal co hol Candidates Ġ= Ġdocument . label Index < Al co hol Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġdrug Candidates Ġ= Ġdocument . label Index < Dr ug Candidate >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlabel er Ġ= Ġdocument . label er < Usage Status >() ĊĊĠĠĠĠĠĠĠ Ġsentences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine Candidates . contains Span ( it ) Ġ|| Ġal co hol Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġdrug Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtokens . inside ( it ). asList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġsentence Tokens Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . detect All ( sentence Tokens ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel er . add ( Usage Status ( sentence Tokens [ it . first ]. startIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ it . last ]. end Index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠThe Ġmodel Ġfor Ġgeneric Ġmethod Ġphrases . Ċ Ġ*/ Ċ @ Singleton Ċ class ĠGeneric Method Ph rases ( val Ġdetector : ĠSequence Detector < String , ĠToken >) Ġ{ ĊĠĠĠ Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Setting (" sh . generic Method Ph rases . as Data Path ") Ġpath : ĠPath ĊĠĠĠ Ġ) Ġ: Ġthis ( Sequence Detector . load FromFile ( path , Ġtoken Text Equals )) Ċ } Ċ Ċ /** Ċ Ġ* ĠDetect s Ġmethod Ġphrases Ġthat Ġcould Ġapply Ġto Ġany Ġsocial Ġhistory Ġusage Ġtype . Ċ Ġ*/ Ċ class ĠGeneric Method Phrase Detector ( ĊĠĠĠĠĠĠĠ Ġval Ġdetector : ĠSequence Detector < String , ĠToken > Ċ ) Ġ: ĠDocument Task Ġ{ ĊĠĠĠ Ġ@ Inject Ġinternal Ġconstructor ( ph rases : ĠGeneric Method Ph rases ) Ġ: Ġthis ( ph rases . detector ) ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( document : ĠDocument ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsentences Ġ= Ġdocument . label Index < Sentence >() ĊĠĠĠĠĠĠĠ Ġval Ġtokens Ġ= Ġdocument . label Index < Parse Token >() ĊĊĠĠĠĠĠĠĠ Ġval Ġnic ot ine Candidates Ġ= Ġdocument . label Index < N ic ot ine Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġal co hol Candidates Ġ= Ġdocument . label Index < Al co hol Candidate >() ĊĠĠĠĠĠĠĠ Ġval Ġdrug Candidates Ġ= Ġdocument . label Index < Dr ug Candidate >() ĊĊĠĠĠĠĠĠĠ Ġval Ġlabel er Ġ= Ġdocument . label er < Generic Method Phrase >() ĊĊĠĠĠĠĠĠĠ Ġsentences ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnic ot ine Candidates . contains Span ( it ) Ġ|| Ġal co hol Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġdrug Candidates . contains Span ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtokens . inside ( it ). asList () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġsentence Tokens Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetector . detect All ( sentence Tokens ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabel er . add ( Generic Method Phrase ( sentence Tokens [ it . first ]. startIndex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence Tokens [ it . last ]. end Index )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun ĠDocument . find Re levant An cestors ( labels : ĠLabel Index < *> ): ĠCollection < Dependency > Ġ{ ĊĠĠĠ Ġval Ġre lev ants Ġ= ĠHashSet < Dependency >() ĊĊĠĠĠ Ġval Ġdependencies Ġ= Ġdependencies () ĊĊĠĠĠ Ġlabels ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc ue Dependencies Ġ= Ġdependencies . inside ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc ue Dependencies . map To ( re lev ants ) Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Head ( cue Dependencies ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġdependency Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( dep Ġin Ġdependency . self And Parent Iterator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre lev ants . add ( dep ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dep . dep . part Of Speech . is Verb Ġ|| Ġdep . relation Ġ== ĠU DR el ation . ROOT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġre lev ants Ċ } Ċ