使用Pandas Dataframe的nGram频率

时间:2017-12-12 12:20:35

标签: python pandas data-mining

所以我在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,所以我需要获得最常用的东西的清单。

作为奖励,如果我能告诉剧本最低重复频率,这将是非常棒的,所以它可以满足将来的任何需求。

1 个答案:

答案 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']