如果我用dmm_replace()替换带有lemmas的单词,并希望用KWIC进行搜索,我怎样才能将引理映射回原始单词?

时间:2018-04-20 22:40:46

标签: r quanteda

如果我有以下data.frame:

df <- data.frame(text = c("Ow now brown cow","Unique New York",
                         "The sassy salesmans agonized about a bigger sale"),
                person = c("Jim", "John", "Jim"),
                year = c(1994, 1995, 1996),
                stringsAsFactors = FALSE)
x <- corpus(df)

xdfm <- tokens(x) %>% 
    tokens_remove(stopwords("english"), padding = TRUE) %>%
    dfm(remove_numbers = TRUE, remove_punct = TRUE,
        ngrams = 1:3, remove_symbols = TRUE, concatenator= " ")

xdfmr <- dfm_replace(x, pattern = lemmaFile$V2, replacement = lemmaFile$V1)

lemmaFile只是一个词汇列表的列表。以2列的data.frame格式。

当我执行kwic之类的

 kwic(dfmr, "agonized", window = 100)
由于引理文件会以痛苦取代它,所以很痛苦不会出现。如何确保我在kwic中获得前词并显示原始文本?

1 个答案:

答案 0 :(得分:0)

简短的回答是,你不能,至少不是你接近它的方式。

dfm_replace()返回dfm,您无法将dfm输入kwic()。此外,一旦你形成了ngrams,你的标记就是复合标记,并且不会以同样的方式出现引号。

然而,还有另一种方法:处理令牌而不是dfm。如果您提供未经说明的标记作为kwic()匹配的模式参数,则可以按照您希望的方式返回其上下文,但随后将lemmatised标记提供给dfm以进行进一步处理。此方法使用tokens_replace()而不是dfm_replace()

xtoks <- 
    tokens(x, remove_numbers = TRUE, remove_punct = TRUE, remove_symbols = TRUE) %>% 
    tokens_remove(stopwords("english"), padding = TRUE)

lemmaFile = list(V2 = "agonized", V1 = "agonize")
xtoklemma <- tokens_replace(xtoks, pattern = lemmaFile$V2, replacement = lemmaFile$V1)

kwic(xtoks, lemmaFile$V2)
## [text3, 4]  sassy salesmans | agonized |  bigger sale

此处,匹配使用前引理标记,但您可以使用xtoklemma进行进一步处理(例如,构建dfm,有或没有ngrams)。