如何在python中计算两个单词的距离

如何在python中计算两个单词的距离,python,database,nltk,Python,Database,Nltk,我必须提取一个数据库并将其放入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=

我必须提取一个数据库并将其放入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个


这似乎有相同的原因:
nltk
被赋予了错误的数据类型。它会逐字符比较字符串;它逐元素比较元组。每个元组中有一个元素,两个元组之间的元素不同,因此结果当然是1。

您的问题是由事实
游标引起的。fetchall()
将所有行作为元组列表返回,要解决此问题,您可以使用:

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

@KarlKnechtel已经解释了为什么您会以这种形式获得输出

谢谢您的回答,所以我编辑它:

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
但我想要名字,这里不是名字。所以我试着说
“从作者中选择姓名”

但是当我说的时候,它不起作用。所以我尝试了其他方法,但总是不起作用。我想知道我怎样才能像以前那样做,只是为了名字,而不是钥匙


再次感谢并感谢您之前的回答

您最初的查询是:
selectname FROM AUTHORS
为什么不使用这个?