【问题标题】:Text similarity approaches do not reflect "real" similarity between texts文本相似性方法不反映文本之间的“真实”相似性
【发布时间】:2018-07-30 10:02:19
【问题描述】:

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

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

CV 大约有 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'(Job Description) 的相似度更高,尽管它只包含职位描述中的一个词。

【问题讨论】:

  • 贴代码sn-ps

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


【解决方案1】:

我已经意识到我做错了什么。当我编写如下代码行时,我将单词“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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2017-07-28
    • 2018-03-07
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多