检测语料库中的模式匹配

问题描述

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

这是我的 MWE

require(quanteda)

mun <- structure(list(`Codice Regione` = c("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"),`Denominazione Regione` = c("Lombardia","Piemonte","Piemonte")),row.names = c(NA,-5L),class = c("tbl_df","tbl","data.frame"))

pq <- structure(list(date = c("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.")),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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...