【问题标题】:Finding similar phases寻找相似的阶段
【发布时间】:2021-06-06 01:00:22
【问题描述】:

如何在大量阶段(即推文或电影评论)中找到相似的阶段?

例如'I like chocolate'类似于'I like chocolate bar''I like mango';与'I ate apple''I ate apples' 相同。

import pandas as pd

data = {'Text':  ['I like chocolate',
                  'I like chocolate bar',
                  'I ate apple',
                  'I ate apples',
                  'I like mango',
                  'I can swim']  
        }

df = pd.DataFrame (data, columns = ['Text'])

【问题讨论】:

    标签: pandas string nlp similarity


    【解决方案1】:

    fuzzywuzzy包中,使用extractWithoutOrder未排序版本的extract查找字符串之间的相似度:

    # pip install fuzzywuzzy
    # conda install -c conda-forge fuzzywuzzy 
    from fuzzywuzzy.process import extractWithoutOrder as extract
    from operator import itemgetter
    
    ratio = df["Text"].apply(lambda s: list(map(itemgetter(1), extract(s, df["Text"]))))
    out = pd.DataFrame(ratio.tolist(), index=df.index, columns=df.index)
    
    >>> out
         0    1    2    3    4    5
    0  100   95   44   43   64   86
    1   95  100   86   86   86   86
    2   44   86  100   96   49   38
    3   43   86   96  100   48   45
    4   64   86   49   48  100   36
    5   86   86   38   45   36  100
    

    【讨论】:

    • 这是一个完美的解决方案。我注意到 5x5 比较很快; 10x10 大致相同,但 100x100 需要很长时间。我怎样才能最好地针对 10,000 行运行它?
    【解决方案2】:

    尝试使用来自jellyfishsoundex,相同的输出应该具有相似的阶段

    import jellyfish
    df.Text.map(jellyfish.soundex)
    0    I422
    1    I422
    2    I314
    3    I314
    4    I425
    5    I252
    Name: Text, dtype: object
    

    【讨论】:

      【解决方案3】:

      为了找到句子/短语之间的相似度,一个简单的技术是使用bag-of-words模型并应用相似度计算技术,例如cosine similarity。这可以通过使用word vectors 进一步改进。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-09
        • 2011-12-12
        • 2010-09-09
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多