所以我在MongoDB中有一些名为title
的字段(以及许多其他字段),但我们会关注这一项。
我想在整个时间内检索最常用的单词,例如,预期的结果将是
{
"christmas 2017": 30,
"foo bar": 4,
"apple iphone": 10,
...
}
所以我可以渲染一个条形图并查看事物,我的代码我可以“做到这一点”,但它也给了我只有1个频率的ngram,这是我不想要的,因为它们的使用不多于曾经,这么无用的信息。
关键在于,要获得标题中最常见的单词,我认为一个好的ngram范围将是2-3个单词,因为1是不够的,而且3个以上太具体了。
这是我的代码,它正在运行,但我需要一种方法来获取非重复的东西(也许还有更好的方法来实现这一点)
vector = CountVectorizer(ngram_range=(2,2), analyzer='word')
n_gram = vectorizer.fit_transform(df[text_field])
frequencies = n_gram.toarray().sum(axis=0)
results = pd.DataFrame(frequencies, index=vectorizer.get_feature_names(), columns=['frequency'])
results.plot.bar()
毋庸置疑,绘制的条形图有大量不相关的信息(只有1个频率的东西)
这段代码,我将用它来解析长文本字段,例如description
,所以我需要获得最常用的东西的清单。
作为奖励,如果我能告诉剧本最低重复频率,这将是非常棒的,所以它可以满足将来的任何需求。
答案 0 :(得分:0)
希望在得到nGrams之后这会有所帮助。
nG=["apple iphone","apple iphone","apple iphone",
"apple iphone", "christmas 2017","christmas 2017",
"apple iphone","apple iphone", "foo bar",
"christmas 2017","christmas 2017","christmas 2017",
"christmas 2017","apple iphone"]
from collections import Counter
import heapq
nG=Counter(nG)
ng
输出:
Counter({'apple iphone': 7, 'christmas 2017': 6, 'foo bar': 1})
另一个命令:
heapq.nlargest(5,nG,key=nG.get)
输出:
['apple iphone', 'christmas 2017', 'foo bar']