НЛП - найди подобное / Phoneti c слово и посчитай счет в абзаце - PullRequest
0 голосов
/ 27 февраля 2020

Я занимаюсь разработкой простого проекта НЛП, в котором мы дали набор слов и нашли похожее / фонетически похожее слово из текста. Я нашел много алгоритмов, но не пример приложения.

Также он должен дать оценку сходства, сравнивая ключевое слово и найденное слово.

Может ли кто-нибудь мне помочь?

    def word2vec(word):
    from collections import Counter
    from math import sqrt

    cw = Counter(word)
    sw = set(cw)
    lw = sqrt(sum(c*c for c in cw.values()))
    return cw, sw, lw

def cosdis(v1, v2):
    common = v1[1].intersection(v2[1])
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]

list_A = ['e-commerce', 'ecomme', 'e-commercy', 'ecomacy', 'E-Commerce']
list_B = ['E-Commerce']

for word in list_A:
    for key in list_B:
            res = cosdis(word2vec(word), word2vec(key))
            print(res)

Этот код только слово к слову.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2020

Cosine Сходство в основном используется со строками, а не сравнивает одно слово с другим словом. Я бы порекомендовал вам использовать что-то вроде расстояния Левенштейна (также называемое «Редактировать расстояние»).

Изменить расстояние (иначе расстояние Левенштейна) - это мера сходства между двумя строками, называемыми исходной и целевой строками. Расстояние между строками описывается как минимальное количество операций редактирования (удаления, вставки или замены), необходимых для преобразования источника в цель. Таким образом, чем меньше расстояние, тем выше вероятность того, что они очень похожи.

Вы можете использовать его через библиотеку nltk Python следующим образом:

import nltk

w1 = 'mapping'
w2 = 'mappings'

nltk.edit_distance(w1, w2)

В этом в случае, если выходные данные возвращаются как 1, так как между w1 и w2

имеется различие в одну букву
0 голосов
/ 27 февраля 2020

Я думаю, что вы имеете в виду что-то вроде API , который может сначала преобразовать слово в IPA символы (форма обозначения phoneti c), а затем сравнить IPA символов.

from collections import Counter
from math import sqrt
import eng_to_ipa as ipa

def word2vec(word):
    cw = Counter(word)
    sw = set(cw)
    lw = sqrt(sum(c*c for c in cw.values()))
    return cw, sw, lw

def cosdis(v1, v2):
    common = v1[1].intersection(v2[1])
    return sum(v1[0][ch]*v2[0][ch] for ch in common)/v1[2]/v2[2]

list_A = ['e-commerce', 'ecomme', 'e-commercy', 'ecomacy', 'E-Commerce']
list_B = ['E-Commerce']

IPA_list_a = []
IPA_list_b = []
for each in list_A:
    IPA_list_a.append(ipa.convert(each))
for each in list_B:
    IPA_list_b.append(ipa.convert(each))

for word in IPA_list_a:
    for key in IPA_list_b:
            res = cosdis(word2vec(word), word2vec(key))
            print(res)

Проверьте это: [https://github.com/mphilli/English-to-IPA] [1]

>>> import eng_to_ipa as ipa
>>> ipa.convert("The quick brown fox jumped over the lazy dog.")
'ðə kwɪk braʊn fɑks ʤəmpt ˈoʊvər ðə ˈleɪzi dɔg.'

Пример основан на приведенной выше ссылке на github.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...