如何查看映射到特定词干词的原始单词

5
我正在使用R中的tm_map进行文本分析。我运行以下代码(没有错误)以生成(经过词干化和其他预处理的)单词的文档-术语矩阵。
  corpus = Corpus(VectorSource(textVector))
  corpus = tm_map(corpus, tolower)
  corpus = tm_map(corpus, PlainTextDocument) 
  corpus = tm_map(corpus, removePunctuation)
  corpus = tm_map(corpus, removeWords, c(stopwords("english")))
  corpus = tm_map(corpus, stemDocument, language="english")

  dtm = DocumentTermMatrix(corpus)
  mostFreqTerms = findFreqTerms(dtm, lowfreq=125) 

但是当我查看我的(经过词干处理的)最常用术语时,我看到了几个让我想:“嗯,是哪些单词被词干处理成这样的?”此外,可能有一些词干词对我来说一开始看起来很合理,但也许我错过了它们实际上包含不同含义的单词的事实。
我想应用这个SO答案中描述的保留特定术语的策略/技术进行词干提取(例如,保留“自然”和“归化”的不同词根)。 使用tm软件包进行文本挖掘-词干提取 但为了更全面地做到这一点,我想看到所有映射到我的最常用词干词的单独单词列表。有没有办法找到这些单词,当它们被词干提取后,就会产生我的mostFreqTerms列表?
编辑:可重现的例子
textVector = c("Trisha Takinawa: Here comes Mayor Adam West 
               himself. Mr. West do you have any words 
               for our viewers?Mayor Adam West: Box toaster
               aluminum maple syrup... no I take that one 
               back. Im gonna hold onto that one. 
               Now MaxPower is adding adamant
               so this example works")

      corpus = Corpus(VectorSource(textVector))
      corpus = tm_map(corpus, tolower)
      corpus = tm_map(corpus, PlainTextDocument) 
      corpus = tm_map(corpus, removePunctuation)
      corpus = tm_map(corpus, removeWords, c(stopwords("english")))
      corpus = tm_map(corpus, stemDocument, language="english")

      dtm = DocumentTermMatrix(corpus)
      mostFreqTerms = findFreqTerms(dtm, lowfreq=2) 
      mostFreqTerms

上述mostFreqTerms输出
“adam” “one” “west”
我正在寻找一种编程方法来确定词干词“adam”来自原始单词“adam”和“adamant”。

2
我不知道有什么方法可以查看您的语料库中正在进行词干提取的特定单词,但您可以查看snowball网站上的等效列表。例如,这是英文列表 - scoa
嗯,有人在下面的SO链接中写道:“例如,“university”和“universal”在词干提取后都变成了“univers”,你无法正确地恢复它。” http://stackoverflow.com/questions/25160521/converting-stemmed-word-to-the-root-word-in-r?rq=1 - Max Power
1
这个答案似乎是你在寻找的。 - Qualtagh
嘿,感谢Qualtagh提供的链接。你链接中的以下建议实际上与scoa提供的“英语列表”链接相同:“作为一种选择:找到所有单词及其形式的字典。为每个单词找到一个词干。将此投影保存为映射:(词干,所有单词形式的列表)。这样,您就可以获得给定词干的所有单词形式的列表。” - Max Power
1
在那个答案的_update_部分中,还有一个反向版本的词干算法。它允许获取所有产生给定词干的单词,而无需使用字典(使用规则集)。我不确定这是否是您所需要的。 - Qualtagh
显示剩余3条评论
1个回答

1
在这里,您可以看到词干化的单词“west”来自单词“west”,“west”和“wester”。
import nltk

from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
from nltk.stem import RSLPStemmer
import string 

st = RSLPStemmer()
punctuations = list(string.punctuation)
textVector = "Trisha Takinawa: Here comes Mayor adams West himself. Mr. \
            West do you have any words for our viewers?Mayor Adam Wester: \
    Box toaster aluminum maple syrup... no I take that one back. Im gonna hold \
    onto that one. Now MaxPower is adding adamant so this example works"

tokens = word_tokenize(textVector.lower())
tokens = [w for w in tokens if not w in punctuations]
filtered_words = [w for w in tokens if not w in stopwords.words('english')]
steammed_words = [st.stem(w) for w in filtered_words ]

allWordDist = nltk.FreqDist(w for w in steammed_words)

for w in allWordDist.most_common(2):
    for i in range(len(steammed_words)):
        if steammed_words[i] == w[0]:
            print str(w[0])+"="+ filtered_words[i]

west=west

west=west

west=wester

ad=adams

ad=adam


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接