文本相似性方法不能反映文本之间的“真实”相似性

时间:2018-07-30 10:02:20

标签: python nlp text-mining similarity sentence-similarity

我正在将CV的内容(已删除停用词的.txt文件)与非常紧凑的职位描述(JD)进行比较,如下所示:

  

项目管理,   领导,   销售,   树液,   营销

简历包含大约600个单词,而JD仅包含上面突出显示的单词。

我当前遇到的问题,并且我确定这是由于我缺乏知识而导致的,当我对其应用相似性度量时,结果会造成混淆。例如,我的简历编号为1,其中包含来自JD的所有单词,有时重复多次。我还有CV 2,它与JD相比仅包含 project 一词。即使当我应用 余弦相似度,差异,jaccard距离和编辑距离 时,所有这些措施都使我在CV2与JD之间的相似度更高。对我来说很奇怪,因为它们之间只有一个单词相等,而CV1拥有JD的所有单词。

我正在采用错误的措施来评估相似性?如果这是一个天真的问题,对不起,我是编程的初学者。

遵循代码

差异

    from difflib import SequenceMatcher
    def similar(a, b):
        return SequenceMatcher(None, a, b).ratio()
    similar('job.txt','LucasQuadros.txt')
    0.43478260869565216
    similar('job.txt','BrunaA.Fernandes.txt')
    0.2962962962962963

余弦

    from sklearn.feature_extraction.text import TfidfVectorizer
    document= ('job.txt','LucasQuadros.txt','BrunaA.Fernandes')
    tfidf = TfidfVectorizer().fit_transform(document)
    matrix= tfidf * tfidf.T
    matrix.todense()
    matrix([[1.        , 0.36644682, 0.        ],
    [0.36644682, 1.        , 0.        ],
    [0.        , 0.        , 1.        ]])

编辑距离

    import nltk
    w1= ('job.txt')
    w2= ('LucasQuadros.txt')
    w3= ('BrunaA.Fernandes.txt')
    nltk.edit_distance(w1,w2)
    11
    nltk.edit_distance(w1,w3)
    16

提卡距离

    import nltk
    a1= set('job.txt')
    a2= set('LucasQuadros.txt')
    a3= set('BrunaA.Fernandes.txt')
    nltk.jaccard_distance(a1,a2)
    0.7142857142857143
    nltk.jaccard_distance(a1,a3)
    0.8125

就像你们看到的那样,尽管'LucasQuadros.txt'(CV1)与'job.txt'(职位描述)具有更高的相似性,尽管它只包含职位描述中的一个单词。

1 个答案:

答案 0 :(得分:0)

我意识到自己做错了。当我写一个代码行时,我在比较单词“ job.txt”和“ LucasQuadros.txt”,而不是文档本身。

similar('job.txt','LucasQuadros.txt')

要进行更改,我只需在代码中加入.read函数即可:

jd = open('job.txt')
jd = jd.read()
cv1= ('LucasQuadros.txt')
cv1= cv1.read()

from difflib import SequenceMatcher
def similar(a, b):
    return SequenceMatcher(None, a, b).ratio()

similar(jd, cv1)
0.0
similar(jd,cv2)
0.007104795737122558

现在相似性是正确的。 正如我在上面所说的,这是一个非常初学者的错误。