如何从文本数据获取词袋?(How to get bag of words from textual

2019-08-17 18:40发布

我使用的是大数据集文字的预测问题的工作。 我采取Words模型的袋子。

什么应该是将文字的袋的最佳方式? 现在,我有TF-IDF的各种单词和单词的数量太大,将其用于进一步分配。 如果我使用TF-IDF的标准,应该是什么让文字包的TF-IDF门槛? 或者我应该使用一些其他算法。 我使用的蟒蛇。

Answer 1:

使用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})
>>> 


Answer 2:

词袋可以被定义为其中每一行表示一个文件和列表示各个标记的矩阵。 还有一两件事,文字的顺序不维护。 建立一个“词袋”,包括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())


Answer 3:

一袋字模型是文本表示方法不错在不同的机器学习任务应用。 但在第一步,你需要清理从例如标点符号,HTML标记不必要的数据资料,停止的话,...对于这些任务,你可能可以很容易地利用图书馆一样美丽的汤 (删除HTML标记)或NLTK (以在Python中删除停止的话)。 清洁您的数据后,你需要创建一个载体功能(机器学习数据的数值表示),这是其中一袋词中扮演的角色。 scikit学习有一个模块(feature_extraction模块),它可以帮助您创建袋的词的功能。

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



Answer 4:

正如其他人已经提到的,使用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']

这个程序可以Patty3118回答有关容易地组合collections.Counter ,这可能导致你知道哪些倍的数量_.js在文章中所提到的,例如。



Answer 5:

你应该看看scikits-learn ,其中有一堆此功能在烘焙。甚至还有一些示例代码在其网站上。

另一种选择是nltk ,里面有很多不错的语言处理功能。 我没有用它作为多,但现在看来似乎应该有做你正在做什么的一些设施。



Answer 6:

从一本书“机器学习蟒蛇”:

import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
count = CountVectorizer()
docs = np.array(['blablablatext'])
bag = count.fit_transform(docs)


文章来源: How to get bag of words from textual data?