How to get bag of words from textual data?
我正在使用一个大的文本数据集处理预测问题。我正在实现一袋字模型。
什么是最好的方法来获得这些词语?现在,我有各种单词的tf idf,而且单词的数目太大,无法用于进一步的任务。如果我使用tf idf标准,那么tf idf阈值应该是什么?或者我应该使用其他一些算法。我正在使用python。
使用Collections.Counter类
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> 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}) >>> |
一袋单词可以定义为一个矩阵,其中每一行代表一个文档,每一列代表单个标记。还有一件事,文本的顺序没有被维护。建立一个"字袋"需要3个步骤
要记住的限制:1。无法捕获短语或多单词表达式2。对拼写错误敏感,可以使用拼写矫正器或字符表示来解决拼写错误,
例如
1 2 3 4 5 6 7 | 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()) |
文字袋模型是一种很好的文本表示方法,可以应用于不同的机器学习任务。但在第一步中,您需要从不必要的数据中清除数据,例如标点符号、HTML标记、停止词等。对于这些任务,您可以很容易地利用库,比如漂亮的soup(删除HTML标记)或python中的nltk(删除停止词)。在清理完数据之后,您需要创建一个向量特性(用于机器学习的数据的数字表示),这就是一袋单词发挥作用的地方。Scikit Learn有一个模块(Feature_Extraction模块),可以帮助您创建单词包功能。
在本教程中,您可能会发现您所需要的所有详细信息,而且本教程非常有用。我发现它们都很有用。
正如其他人已经提到的,如果您想要稳定和可扩展的东西,使用EDOCX1[1]将是您最好的选择。它是高度可配置的。
但是,如果你想调整默认值,它有一个相当陡的学习曲线的缺点。
我曾经遇到过一种情况,我想要一袋话。问题是,它涉及的是关于具有外来名称的技术,如
例如,nltk的
因此,不管它值多少钱,我最后还是写了这个小程序,根据我自己的标点符号标准,把所有的单词标记成一个
1 2 3 4 5 6 7 8 9 | 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关于
从《机器学习Python》一书中:
1 2 3 4 5 | import numpy as np from sklearn.feature_extraction.text import CountVectorizer count = CountVectorizer() docs = np.array(['blablablatext']) bag = count.fit_transform(docs) |
您应该查看
另一个选项是