【问题标题】:Python Count Number of Phrases in TextPython 计算文本中的短语数
【发布时间】:2018-02-20 12:23:30
【问题描述】:

我在 excel 中有一个产品评论/描述列表,我正在尝试使用 Python 根据评论中出现的单词对它们进行分类。

我使用 Pandas 将评论和表明产品属于特定分类的单词列表导入 Python,然后计算分类单词的出现次数。

这一切都适用于单个分类词,例如“计算机”,但我正在努力使其适用于短语,例如'笔记本电脑壳'。

我浏览了一些答案,但没有一个对我来说是成功的,包括:

根据此处的答案仅使用text.count(['laptop case', 'laptop bag'])Counting phrase frequency in Python 3.3.2,但是因为您需要将文本拆分为不起作用的文本(我认为 text.count 也可能不适用于列表?)

我发现的其他答案只看一个单词的出现。我可以做些什么来计算不涉及将文本正文拆分为单个单词的单词和短语?

我目前拥有的代码(适用于单个术语)是:

for i in df1.index:
    descriptions = df1['detaileddescription'][i]
    if type(descriptions) is str:
        descriptions = descriptions.split()
        pool.append(sum(map(descriptions.count, df2['laptop_bag'])))
    else:
        pool.append(0)
print(pool)

【问题讨论】:

    标签: python pandas text-classification


    【解决方案1】:

    你在正确的轨道上!您目前正在拆分为单个单词,这有助于您找到单个单词的出现,正如您所指出的那样。要查找长度为n 的短语,您应该将文本分成长度为n 的块,称为n-grams

    为此,请查看NLTK package

    from nltk import ngrams
    sentence = 'I have a laptop case and a laptop bag'
    n = 2
    bigrams = ngrams(sentence.split(), n)
    for gram in bigrams:
        print(gram)
    

    【讨论】:

    • 您可能还想研究 Spacy 库,它也有 n-gram 分词器,根据我的经验,使用起来很有趣。
    【解决方案2】:

    Sklearn 的CountVectorizer 是标准方式

    from sklearn.feature_extraction import text
    vectorizer = text.CountVectorizer()
    vec = vectorizer.fit_transform(descriptions)
    

    如果您想查看计数为dict

    count_dict = {k:v for k,v in zip(vectorizer.get_feature_names(), vec.toarray()[0]) if v>0}
    print (count_dict)
    

    默认是unigrams,你可以使用bigrams或者更高的ngrams和ngram_range参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多