如何从文本数据中提取单词呢? [关闭]
machine-learning
python
6
0

我正在使用大型文本数据集处理预测问题。我正在实现词袋模型。

什么才是最好的方法?现在,我有了各种单词的tf-idf ,单词的数量太大了,无法用于进一步的分配。如果我使用tf-idf标准,那么获取单词袋的tf-idf阈值应该是多少?还是我应该使用其他一些算法。我正在使用python。

参考资料:
Stack Overflow
收藏
评论
共 4 个回答
高赞 时间 活跃

词袋可以定义为矩阵,其中每一行代表一个文档,而各列代表单个令牌。还有一件事,不保持文本的顺序。构建“单词袋”涉及3个步骤

  1. 标记化
  2. 数数
  3. 归一化

要记住的限制:1.无法捕获短语或多词表达式2.对拼写错误敏感,可以使用拼写校正器或字符表示来解决,

例如

from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
data_corpus = ["John likes to watch movies. Mary likes movies too.", 
"John also likes to watch football games."]
X = vectorizer.fit_transform(data_corpus) 
print(X.toarray())
print(vectorizer.get_feature_names())
收藏
评论

正如其他人已经提到的那样,如果您想要稳定且可扩展的内容,那么使用nltk将是您的最佳选择。它是高度可配置的。

但是,如果要调整默认值,则学习曲线比较陡峭。

我曾经遇到一种情况,我想拿一句话。问题是,它涉及有关外来名称全为-_等的技术的文章,例如vue-router_.js等。

例如,nltk的word_tokenize的默认配置是将vue-router分为两个单独的vuerouter字。我什至没有在谈论_.js

因此,出于价值考虑,我最终编写了这个小例程,根据我自己的标点标准将所有单词标记为一个list

import re

punctuation_pattern = ' |\.$|\. |, |\/|\(|\)|\'|\"|\!|\?|\+'
text = "This article is talking about vue-router. And also _.js."
ltext = text.lower()
wtext = [w for w in re.split(punctuation_pattern, ltext) if w]

print(wtext)
# ['this', 'article', 'is', 'talking', 'about', 'vue-router', 'and', 'also', '_.js']

可以轻松地将此例程与有关collections.Counter Patty3118答案结合使用,例如,这可以使您知道在文章中提到_.js的次数。

收藏
评论

词袋模型是一种很好的文本表示方法,可以应用于不同的机器学习任务中。但是在第一步中,您需要从不必要的数据中清除数据,例如标点符号,html标记,停用词等等。对于这些任务,您可以轻松利用Beautiful Soup (用于删除HTML标记)或NLTK (用于在Python中删除停用词)。清理数据后,您需要创建矢量功能(用于机器学习的数据的数字表示),这是单词袋的作用。 scikit-learn有一个模块( feature_extraction模块),可以帮助您创建单词袋功能。

你可能会发现你在细节需要在这个教程中这个人可以是非常有益的。我发现它们都很有用。

收藏
评论

使用collections.Counter类

>>> import collections, re
>>> texts = ['John likes to watch movies. Mary likes too.',
   'John also likes to watch football games.']
>>> bagsofwords = [ collections.Counter(re.findall(r'\w+', txt))
            for txt in texts]
>>> bagsofwords[0]
Counter({'likes': 2, 'watch': 1, 'Mary': 1, 'movies': 1, 'John': 1, 'to': 1, 'too': 1})
>>> bagsofwords[1]
Counter({'watch': 1, 'games': 1, 'to': 1, 'likes': 1, 'also': 1, 'John': 1, 'football': 1})
>>> sumbags = sum(bagsofwords, collections.Counter())
>>> sumbags
Counter({'likes': 3, 'watch': 2, 'John': 2, 'to': 2, 'games': 1, 'football': 1, 'Mary': 1, 'movies': 1, 'also': 1, 'too': 1})
>>> 
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号