python - 向量化时保留文本数据的顺序

标签 python python-3.x scikit-learn nltk

我正在尝试使用 scikit-learn 编写机器学习算法,该算法可以解析文本并根据训练数据对其进行分类。

使用文本数据的示例直接取自 scikit-learn 文档,使用 CountVectorizer 生成每个单词出现次数的稀疏数组。

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> count_vect = CountVectorizer()
>>> X_train_counts = count_vect.fit_transform(twenty_train.data)

不幸的是,这没有考虑短语的任何顺序。可以使用更大的 ngrams (CountVectorizer(ngram_range=(min, max))) 来查看特定的短语,但这会迅速增加特征的数量并且不是甚至没有那么好。

是否有另一种处理有序文本的好方法?我绝对愿意将自然语言解析器(nltktextblob 等)与 scikit-learn 一起使用。

最佳答案

word2vec embedding?呢?它是一种基于神经网络的词嵌入向量,并考虑了上下文。这可以为您的分类器提供一组更复杂的功能。

一个强大的用于自然语言处理的 python 库具有良好的 word2vec 实现是 gensim . Gensim 的构建具有很强的可扩展性和快速性,并具有高级文本处理功能。以下是如何开始的简要概述:

正在安装

只需执行 easy_install -U gensimpip install --upgrade gensim

一个简单的 word2vec 示例

import gensim

documents = [['human', 'interface', 'computer'],
 ['survey', 'user', 'computer', 'system', 'response', 'time'],
 ['eps', 'user', 'interface', 'system'],
 ['system', 'human', 'system', 'eps'],
 ['user', 'response', 'time'],
 ['trees'],
 ['graph', 'trees'],
 ['graph', 'minors', 'trees'],
 ['graph', 'minors', 'survey']]

model = gensim.models.Word2Vec(documents, min_count=1)
print model["survey"]

这将输出“调查”映射到的向量,您可以将其用于分类器的特征输入。

Gensim 还有很多其他功能,如果您对自然语言处理感兴趣,值得更好地了解它。

关于python - 向量化时保留文本数据的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38669905/

相关文章:

python-3.x - 无法识别的hadoop主要版本1.2.1错误-使用jayadebeapi进行Hive和Impala jdbc连接

python - basicConfig只能在根记录器上使用,而处理程序/格式化程序只能在命名记录器上使用吗?

python - 使用 Science-Kit 对文档(即文本)执行欧几里德距离测量

python - Sklearn.KMeans : how to avoid Memory or Value Error?

python - Keras 功能 API : "Error when checking input: expected input_1 to have 4 dimensions, but got array with shape (X, Y)"

python - 如何将类型 <class 'pyspark.sql.types.Row' > 转换为 Vector

python - 哪种稀疏矩阵格式更适合构建分块矩阵

python - CSV 到 MySQL 上传问题

python - 如何重命名 pandas 数据框中索引上方的列号 0

python - 在 Scikit Learn 中拟合逻辑模型时,多项式特征无法正常工作