基于词汇和正则表达式矢量化文档
Posted
技术标签:
【中文标题】基于词汇和正则表达式矢量化文档【英文标题】:Vectorize document based on vocabulary AND regex 【发布时间】:2020-08-03 04:04:01 【问题描述】:我正在尝试使用 sklearn 的 CountVectorizer 训练文本分类器。问题是我的训练文档有许多特定于文档的标记。因此,例如,CountVectorizer.fit_transform 方法可以很好地处理常规的英语单词,但是有些标记的格式适合正则表达式:'\w\d\d\w\w\d',例如作为'd84ke2'。就像现在一样,fit_transform 方法只会将 'd84ke2' 当作一个特征来使用。
我希望能够使用与特定正则表达式匹配的特定标记作为自己的特征,并将常规英文单词作为自己的特征,因为创建诸如“d84ke2”之类的特征将没有用,因为这不会在任何其他文件中再次出现。
我还没有找到一种方法来做到这一点,更不用说“最好”的方法了。下面是我的代码示例,您可以在其中看到标记“j64ke2”、“r32kl4”、“w35kf9”和“e93mf9”都变成了它们自己的特征。为了清楚起见,我重复一遍:我想基本上将这些功能浓缩成一个并保留其他功能。
docs = ['the quick brown j64ke2 jumped over the lazy dogs r32kl4.',
'an apple a day keeps the w35kf9 away',
'you got the lions share of the e93mf9']
import numpy as np
# define target and target_names
target_names = ['zero', 'one', 'two']
target = np.array([0, 1, 2])
# Create message bunch.
from sklearn.utils import Bunch
doc_info = Bunch(data=docs, target=target, target_names=target_names)
# Vectorize training data
from sklearn.feature_extraction.text import CountVectorizer
count_vect = CountVectorizer()
count_vect.fit(doc_info.data)
vocab = count_vect.vocabulary_
vocab_keys = list(vocab.keys())
#vocab_vals = list(vocab.values())
X_train_counts = count_vect.transform(doc_info.data)
X = X_train_counts.toarray()
import pandas as pd
df = pd.DataFrame(X, columns=vocab_keys)
【问题讨论】:
也许在使用 CountVectorizer 之前使用docs_clean = [re.sub("\w\d2\w2\d", 'j64ke2', i) for i in docs]
?
【参考方案1】:
yatu 的评论是一个很好的解决方案。通过为每个匹配的正则表达式替换一个单词,我能够在将文档提供给CountVectorizer
之前对其进行清理。
【讨论】:
以上是关于基于词汇和正则表达式矢量化文档的主要内容,如果未能解决你的问题,请参考以下文章