根据频率删除列中的单词
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}
我有一个 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}