如果我执行 dfm_replace() 以用引理替换单词,并想使用 KWIC 进行搜索,我如何才能将引理映射回原始单词?

If I do dfm_replace() to replace words with lemmas, and want to search with KWIC, how can I map back the lemma to the original word?

如果我有以下 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 只是对单词进行词形还原的列表。格式为 data.frame,有 2 列。

当我执行 kwic 赞时

 kwic(dfmr, "agonized", window = 100)

agonized 不会出现,因为引理文件会将其替换为 agonize。如何确保我得到 kwic 中的前引理词并显示原文?

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

dfm_replace() return是一个 dfm,您不能将 dfm 输入到 kwic()。此外,一旦你形成了 ngrams,你的标记就是复合标记,并且不会以相同的方式具有引理。

然而,还有另一种方法:处理令牌而不是 dfm。如果您提供未词形化的标记作为 kwic() 匹配的模式参数,那么您可以按照您想要的方式 return 它们的上下文,然后将词形化的标记提供给 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)。