根据频率删除列中的单词

Deleting a word in column based on frequencies

我有一个 NLP 项目,我想删除关键字中只出现一次的词。也就是说,对于每一行,我都有一个关键字列表及其频率。

我想要

if the frequency for the word in the whole column ['keywords'] ==1 then replace by "". 

我无法逐字测试。所以我的想法是创建一个包含所有单词的列表并删除重复项,然后对该列表中的每个单词 count.sum 然后删除。但我不知道该怎么做。 有任何想法吗?谢谢!

我的数据如下所示:

sample.head(4)

    ID  keywords                                            age sex
0   1   fibre:16;quoi:1;dangers:1;combien:1;hightech:1...   62  F
1   2   restaurant:1;marrakech.shtml:1  35  M
2   3   payer:1;faq:1;taxe:1;habitation:1;macron:1;qui...   45  F
3   4   rigaud:3;laurent:3;photo:11;profile:8;photopro...   46  F

您的陈述使这变得困难。 您应该构建一个数据框,其中每一列都是一个词;然后你可以轻松地使用 pandas 操作,比如求和来做任何你想做的事情。

然而,这将导致数据帧非常稀疏,这绝不是好事。

许多图书馆,例如scikit learn's CountVectorizer让你高效的做自己想做的事。

除了 @jpl 提到的 scikit-learn 的 CountVectorizer 之外,还有一个选项 min_df 可以完全满足您的需求,前提是您能够以正确的格式获取数据。这是一个例子:

from sklearn.feature_extraction.text import CountVectorizer
# assuming you want the token to appear in >= 2 documents
vectorizer = CountVectorizer(min_df=2)
documents = ['hello there', 'hello']
X = vectorizer.fit_transform(documents)

这给你:

# Notice the dimensions of our array – 2 documents by 1 token
>>> X.shape
(2, 1)
# Here is a count of how many times the tokens meeting the inclusion
# criteria are observed in each document (as you see, "hello" is seen once
# in each document
>>> X.toarray()
array([[1],
       [1]])
# this is the entire vocabulary our vectorizer knows – see how "there" is excluded?
>>> vectorizer.vocabulary_
{'hello': 0}