如何从文本语料库中删除特定的单字组,但仍保留该单词的双字组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从文本语料库中删除特定的单字组,但仍保留该单词的双字组?相关的知识,希望对你有一定的参考价值。
我有这样的情况,我必须从文本语料库中删除特定单词unigram,同时保持该单词的双字符以及该单词的单词。
我试图将文本地址数据(excel中的列)与其他一些数字特征一起传递给分类算法。我需要对文本数据进行countvectorize并过滤掉特定的uni-gram并将它们附加回数据帧,以便分类器算法能够理解它。
** sample data in Text Column**
TAJ MAHAL
TAJ MALABAR KOCHI
TAJ MALABAR KOCHI
TAJ RESIDENCY TVM
LEELA PALACE
PALACE ROAD
HILL VIEW ROAD
HILL AVENUE
HILL STATION
对于Taj和Hill,我只想要Bigrams和trigrams,所有单词我想要unigram,bigrams和trigrams。
**输出BIGRAM和UNIGRAM **
TAJ MAHAL
TAJ MALABAR
MALABAR KOCHI
TAJ RESIDENCY
KOCHI
LEELA
PALACE
LEELA PALACE
PALACE ROAD
HILL VIEW
HILL AVENUE
HILL STATION
当我尝试使用停用词作为Taj和Hill时,也不会生成bigrams和trigrams
cv = CountVectorizer( max_features = 200,analyzer='word',ngram_range=(1, 3))
cv_txt = cv.fit_transform(data.pop('Txt'))
for i, col in enumerate(cv.get_feature_names()):
data[col] = pd.SparseSeries(cv_txt[:, i].toarray().ravel(), fill_value=0)
过滤掉特定的unigrams后,我想将它们附加到数据帧,以便我可以运行分类算法。最终输出是计数器文本数据的稀疏矩阵
答案
如果您只想删除特定的unigrams,则必须使用掩码从转换后的数据中删除它们。如果这将用于比一次性分析更复杂的任何事情,我建议编写一个包装类来管理它,否则将很难跟踪。
from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
X = """TAJ MAHAL
TAJ MALABAR KOCHI
TAJ MALABAR KOCHI
TAJ RESIDENCY TVM
LEELA PALACE
PALACE ROAD
HILL VIEW ROAD
HILL AVENUE
HILL STATION"""
X = X.split('
')
df = pd.DataFrame(dict(txt=X))
cv = CountVectorizer(max_features = 200, analyzer='word', ngram_range=(1, 3))
cv.fit(df.txt)
feat_name = cv.get_feature_names()
#List of unigrams to remove (will work for ngrams too)
remove_list = ['taj', 'hill']
# This is the mask of features you want to keep
keep_mask = ~np.in1d(feat_name, remove_list)
# before the mask
X_transformed = cv.transform(df.txt)
print(X_transformed.shape)
# after the mask
X_transformed = X_transformed[:, keep_mask]
print(X_transformed.shape)
编辑更新的问题
# code to do the pandas merge
feat_name = np.array(feat_name)[keep_mask]
df_2 = pd.SparseDataFrame(data=X_transformed,
columns=feat_name,
default_fill_value=0)
df_merge = df.merge(df_2, left_index=True, right_index=True)
输出:
(9, 13)
(9, 11)
要在一个整洁的数据框架中得到这个,只需一个
以上是关于如何从文本语料库中删除特定的单字组,但仍保留该单词的双字组?的主要内容,如果未能解决你的问题,请参考以下文章
需要使用 Alteryx 或 Pandas 从 excel 列中提取特定文本