检测语料库中的模式匹配

Detect pattern matches within a corpus

我想检查变量的文本是否包含一些地理参考。我已经创建了一个包含我感兴趣的所有城市的字典。我的目标是有一个虚拟变量来捕获变量的文本是否包含字典中包含的任何单词。你能帮我吗?我知道这可能很容易,但我正在努力做到这一点。

这是我的 MWE

require(quanteda)

mun <- structure(list(`Codice Regione` = c("01", "01", "01", "01", "01"
), `Codice Comune formato alfanumerico` = c("001001", "001002", "001003", "001004", "001006"), `Denominazione in italiano` = c("Cantù", 
"Airasca", "Ala di Stura", "Albiano d'Ivrea", "Almese"), `Ripartizione geografica` = c("Nord-ovest", "Nord-ovest", 
"Nord-ovest", "Nord-ovest", "Nord-ovest"), `Denominazione Regione` = c("Lombardia", 
"Piemonte", "Piemonte", "Piemonte", "Piemonte")),  row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))

pq <- structure(list(date = c("20180323", "20180323", "20180323", "20180323", "20180323-20180507"), numero = c("4/00007", 
"4/00004", "4/00008", "4/00003", "4/00001"), description = c("Atto Camera Interrogazione a risposta scritta 4-00007 presentato da PATASSINI Tullio testo di Venerdì 23 marzo 2018, seduta n. 1  PATASSINI , LATINI , PAOLINI , CAPARVI , MARCHETTI , BELLACHIOMA , D'ERAMO , DURIGON , GERARDI , SALTAMARTINI , DE ANGELIS e ZICCHIERI . &#8212; Al Presidente del Consiglio dei ministri . &#8212; Per sapere &#8211; premesso che: ad un anno e mezzo dagli straordinari eventi sismici che, a decorrere dal 24 agosto 2016, hanno colpito il centro Italia e l'Abruzzo.", 
 "Atto Camera Interrogazione a risposta scritta 4-00004 presentato da MOLTENI Nicola testo di Venerdì 23 marzo 2018, seduta n. 1  MOLTENI . &#8212; Al Ministro dello sviluppo economico . &#8212; Per sapere &#8211; premesso che: i continui problemi relativi al recapito della posta in alcune zone del comune di Cantù, che si protraggono ormai da anni, stanno esasperando i cittadini che vedono regolarmente leso il proprio diritto ad usufruire di un diritto universale, come quello postale, di qualità", 
"Atto Camera Interrogazione a risposta scritta 4-00008 presentato da FIDANZA Carlo testo di Venerdì 23 marzo 2018, seduta n. 1  FIDANZA , OSNATO , FRASSINETTI . &#8212; Al Ministro delle politiche agricole alimentari e forestali . &#8212; Per sapere &#8211; premesso che: è grave la Situazione di crisi che sta vivendo il mondo vitivinicolo dell'Oltrepò Pavese", 
 "Atto Camera Interrogazione a risposta scritta 4-00003 presentato da RUSSO Paolo testo di Venerdì 23 marzo 2018, seduta n. 1  PAOLO RUSSO . &#8212; Al Ministro della salute . &#8212; Per sapere &#8211; premesso che: con il termine maculopatia o degenerazione maculare si indica qualsiasi patologia che comporti una degenerazione della macula, che è la parte centrale della retina.", 
"Atto Camera Interrogazione a risposta scritta 4-00001 presentato da CATTOI Vanessa testo di Venerdì 23 marzo 2018, seduta n. 1  VANESSA CATTOI , BINELLI , FUGATTI e SEGNANA . &#8212; Al Ministro delle infrastrutture e dei trasporti, al Ministro dell'interno . &#8212; Per sapere &#8211; premesso che: nella prima serata di ieri, 22 marzo 2018, si è consumato l'ennesimo episodio di violenza su un treno, quando alla stazione di Ala, sul convoglio regionale diretto a Verona proveniente da Rovereto, è stata aggredita la capotreno.")), row.names = c(NA, 5L), class = "data.frame")

corpus_pq <- corpus(pq, text_field = "description")
corpus_mun <- corpus(mun, text_field = "Denominazione in italiano")
corpus_munl <- as.list(corpus_mun)
dict_geo <- dictionary(corpus_munl)
geo_dfm <- dfm(corpus_pq, dictionary = dict_geo)
contains_geo <- as.logical(geo_dfm[, "dictGeo"])

非常感谢

您不需要从语料库创建字典 - 相反,为您的位置列表创建一个字典条目,并查找它以生成每个位置的计数。然后您可以通过编译 dfm 来计算它们,然后将该字典键的特征转换为逻辑以获得您想要的向量。

require(quanteda)
## Loading required package: quanteda
## Package version: 3.0
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 12 of 12 threads used.
## See https://quanteda.io for tutorials and examples.

##
## repeat steps above
##

corpus_pq <- corpus(pq, text_field = "description")

现在,创建您所在地区的字典:

dict_geo <- dictionary(list(localities = mun[["Denominazione in italiano"]]))
dict_geo
## Dictionary object with 1 key entry.
## - [localities]:
##   - cantù, airasca, ala di stura, albiano d'ivrea, almese

geo_toks <- tokens(corpus_pq)

kwic(geo_toks, pattern = dict_geo)
## Keyword-in-context with 1 match.                                                                           
##  [text2, 59] alcune zone del comune di | Cantù | , che si protraggono ormai

我们可以看到这里只有一个匹配。

要编译 dfm,请使用此方法,然后将 dfm 的特征列强制转换为逻辑:

geo_dfm <- tokens_lookup(geo_toks, dictionary = dict_geo) %>%
  dfm()

geo_dfm
## Document-feature matrix of: 5 documents, 1 feature (80.00% sparse) and 2 docvars.
##        features
## docs    localities
##   text1          0
##   text2          1
##   text3          0
##   text4          0
##   text5          0

contains_geo <- as.logical(geo_dfm[, "localities"])
contains_geo
## [1] FALSE  TRUE FALSE FALSE FALSE