gpt4 book ai didi

r - 使用 tm-package 进行文本挖掘 - 词干提取

转载 作者:行者123 更新时间:2023-12-02 02:49:44 24 4
gpt4 key购买 nike

我正在使用 tm 包在 R 中进行一些文本挖掘。一切工作都非常顺利。但是,词干提取后会出现一个问题 ( http://en.wikipedia.org/wiki/Stemming )。显然,有些单词具有相同的词干,但重要的是它们不要“放在一起”(因为这些单词意味着不同的东西)。

有关示例,请参阅下面的 4 段文本。在这里你不能互换使用“讲师”或“讲座”(“协会”和“助理”)。然而,这就是步骤 4 中所做的事情。

是否有任何优雅的解决方案如何手动实现某些情况/单词(例如“讲师”和“讲座”保留为两个不同的事物)?

texts <- c("i am member of the XYZ association",
"apply for our open associate position",
"xyz memorial lecture takes place on wednesday",
"vote for the most popular lecturer")

# Step 1: Create corpus
corpus <- Corpus(DataframeSource(data.frame(texts)))

# Step 2: Keep a copy of corpus to use later as a dictionary for stem completion
corpus.copy <- corpus

# Step 3: Stem words in the corpus
corpus.temp <- tm_map(corpus, stemDocument, language = "english")

inspect(corpus.temp)

# Step 4: Complete the stems to their original form
corpus.final <- tm_map(corpus.temp, stemCompletion, dictionary = corpus.copy)

inspect(corpus.final)

最佳答案

我不能 100% 确定您想要什么,也不完全了解 tm_map 的工作原理。如果我理解的话,下面的作品就可以了。据我了解,您想要提供一个不应被词干化的单词列表。我使用 qdap 包主要是因为我很懒,而且它有一个我喜欢的函数 mgsub

请注意,我对使用 mgsubtm_map 感到沮丧,因为它不断抛出错误,所以我只是使用 lapply 来代替。

texts <- c("i am member of the XYZ association",
"apply for our open associate position",
"xyz memorial lecture takes place on wednesday",
"vote for the most popular lecturer")

library(tm)
# Step 1: Create corpus
corpus.copy <- corpus <- Corpus(DataframeSource(data.frame(texts)))

library(qdap)
# Step 2: list to retain and indentifier keys
retain <- c("lecturer", "lecture")
replace <- paste(seq_len(length(retain)), "SPECIAL_WORD", sep="_")

# Step 3: sub the words you want to retain with identifier keys
corpus[seq_len(length(corpus))] <- lapply(corpus, mgsub, pattern=retain, replacement=replace)

# Step 4: Stem it
corpus.temp <- tm_map(corpus, stemDocument, language = "english")

# Step 5: reverse -> sub the identifier keys with the words you want to retain
corpus.temp[seq_len(length(corpus.temp))] <- lapply(corpus.temp, mgsub, pattern=replace, replacement=retain)

inspect(corpus) #inspect the pieces for the folks playing along at home
inspect(corpus.copy)
inspect(corpus.temp)

# Step 6: complete the stem
corpus.final <- tm_map(corpus.temp, stemCompletion, dictionary = corpus.copy)
inspect(corpus.final)

基本上它的工作原理是:

  1. 为所提供的“NO STEM”单词替换唯一标识符键(mgsub)
  2. 然后你就可以(使用stemDocument)
  3. 接下来,将其反转并用“NO STEM”字样(mgsub)作为标识符键
  4. 最后完成词干 (stemCompletion)

这是输出:

## >     inspect(corpus.final)
## A corpus with 4 text documents
##
## The metadata consists of 2 tag-value pairs and a data frame
## Available tags are:
## create_date creator
## Available variables in the data frame are:
## MetaID
##
## $`1`
## i am member of the XYZ associate
##
## $`2`
## for our open associate position
##
## $`3`
## xyz memorial lecture takes place on wednesday
##
## $`4`
## vote for the most popular lecturer

关于r - 使用 tm-package 进行文本挖掘 - 词干提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com