我正在使用 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)
Run Code Online (Sandbox Code Playgroud)
但是,当我查看我的(词干)mostFreqTerms 时,我发现有几个词让我思考:“嗯,是哪些词被词干产生的?” 另外,可能有一些词干词乍一看对我来说有意义,但也许我忽略了一个事实,即它们实际上包含具有不同含义的词。
我想应用此 SO 答案中描述的策略/技术来在词干提取期间保留特定术语(例如,保持“自然”和“自然化”不成为相同的词干术语。 使用 tm-package 进行文本挖掘 - 词干提取
但为了最全面地做到这一点,我希望看到映射到我最常见的词干词的所有单独单词的列表。有没有办法找到词干后产生我的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
Run Code Online (Sandbox Code Playgroud)
...上面的mostFreqTerms输出
[1]《亚当》《一》《西》
我正在寻找一种编程方法来确定词干词“adam”来自原始词“adam”和“adamant”。
小智 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]
Run Code Online (Sandbox Code Playgroud)
西=西
西=西
西=西方
广告=亚当斯
广告=亚当
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |