Как рассчитать расстояние в python по 2 словам - PullRequest
2 голосов
/ 22 марта 2020

Я должен извлечь базу данных и поместить ее в скрипт в python. Я сделал это для всего имени базы данных. Теперь я должен вычислить разницу букв между именем 1 и именем 2 и между именем 1 и именем 3 .... и между именем 2 с именем 3 .....

Я сделал это на данный момент. Я покажу вам, какая небольшая часть того, что я сделал, который вызывает у меня проблему:

valeur = []

c.execute("""SELECT  NAME FROM AUTHORS""")
rows = c.fetchall()
for row in rows:
    valeur.append(row)
x=0
liste=[]
for x in range(len(valeur)):
    for i in range(x+1,len(valeur)):
        ed = nltk.edit_distance(valeur[x],valeur[i])
        dico={"titre":valeur[x],"titre_compare":valeur[i], "distance":ed}
        dico["titre"],"&&",(dico["titre_compare"]),"&&",(dico["distance"])
        print(dico["titre"],"&&",(dico["titre_compare"]),"&&",(dico["distance"]))

И результат здесь


('Khālid Muḥammad ʻAlī al-Ḥājj',) && ('K. Hardono',) && 1
('Khālid Muḥammad ʻAlī al-Ḥājj',) && ('Nūr al-Dīn Ṣammūd',) && 1
('Khālid Muḥammad ʻAlī al-Ḥājj',) && ('Mawlūd Qāsim Nāyit Bulqāsim',) && 1
('Khālid Muḥammad ʻAlī al-Ḥājj',) && ('Ali Ak',) && 1
('Khālid Muḥammad ʻAlī al-Ḥājj',) && ('Nazamī Rāmajī',) && 1

Мои проблемы, почему у меня только 1 на конец сравнения между двумя словами и почему у меня есть "," в конце слов, это должно быть иначе, и я не понимаю, почему я это получил. Я сделал тот же код другой базы данных с небольшим количеством книг, и это сработало.

Большое спасибо, если вы можете мне помочь!

Ответы [ 3 ]

2 голосов
/ 22 марта 2020

почему у меня есть "," в конце слов

У вас есть кортежи, которые содержат одну строку, а не просто строки. Причина, по которой вы их получили, заключается в том, что вы получили их из запроса к базе данных, который дает вам каждую строку в кортеже, независимо от количества столбцов.

, почему у меня только 1 в конце Сравнение между двумя словами

Похоже, причина та же: nltk получают неверные данные. Это будет сравнивать строки символ за символом; он сравнивает кортежи элемент за элементом. В каждом кортеже есть один элемент, и они различаются в двух кортежах, поэтому, конечно, результат равен 1.

1 голос
/ 22 марта 2020

ваши проблемы вызваны тем, что cursor.fetchall() возвращает все строки в виде списка кортежей, для решения которых вы можете использовать:

valeur = [r[0] for r in rows]

@ KarlKnechtel уже объяснил, почему вы получаете свой вывод в этом форма

0 голосов
/ 22 марта 2020

Спасибо за ваш ответ, так что я его выделил:

valeur=[]

req = "select * from AUTHORS"
result = c.execute(req)
print(type(result))
for row in result:
    #print(row[1])
    #print(row[2])
    valeur.append(row[0])

x=0
liste=[]
for x in range(len(valeur)):
    for i in range(x+1,len(valeur)):
        ed = nltk.edit_distance(valeur[x],valeur[i])
        dico={"titre":valeur[x],"titre_compare":valeur[i], "distance":ed}
        (dico["titre"],"&&",(dico["titre_compare"]),"&&",(dico["distance"]))
        double=dico["distance"]+dico["distance"]
        print(dico["titre"],"&&",(dico["titre_compare"]),"&&",(double))

и оно работает идеально, но у меня нет названия, у меня оно есть:

/authors/OL1022167A && /authors/OL1022282A && 6
/authors/OL1022167A && /authors/OL102236A && 4
/authors/OL1022167A && /authors/OL102364A && 6
/authors/OL1022167A && /authors/OL1023681A && 8

Но я хочу имя и здесь это не имя. Я пытался сказать
"select name from authors"

Но когда я это сказал, это не сработало. Поэтому я пробовал другие вещи, но это всегда не работает. Я хотел бы знать, как я могу сделать, как я сделал, но только для имени, а не для ключа.

Еще раз спасибо и спасибо за ваш предыдущий ответ !!!!

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