语言识别中的差异langid

问题描述:

我有一个我读过的数据库。我想确定列中定义的特定单元格中的语言。我正在使用python的langid库。语言识别中的差异langid

我从数据库中读取这样的:

connector = sqlite3.connect("somedb.db") 
selecter = connector.cursor() 
selecter.execute(''' SELECT tags FROM sometable''') 
for row in selecter: #iterate through all the rows in db 
    #print (type(row)) #tuple 
    rf = str(row) 
    #print (type(rf)) #string 
    lan = langid.classify("{}".format(rf)) 

从技术上讲,它的工作原理。它标识所使用的语言,稍后(此处未显示)将识别的语言写回到数据库中。

所以,现在出现了怪异的部分。 我想手动仔细检查一些结果。所以,我有这样的话:

a = "shadow party people bw music mer white man black france men art nature monochrome french fun shoe sand nikon europe noir noiretblanc sable playa poetic nb ombre shade contraste plage blanc saxophone dunkerque nord homme musique saxo artiste artistique musicien chaussure blancandwhite d90 saxophoniste zyudcoote" 

当我执行的database语言识别它绘出我的葡萄牙到数据库中。 但是,像这样进行的:

a = "shadow party people bw music mer white man black france men art nature monochrome french fun shoe sand nikon europe noir noiretblanc sable playa poetic nb ombre shade contraste plage blanc saxophone dunkerque nord homme musique saxo artiste artistique musicien chaussure blancandwhite d90 saxophoniste zyudcoote" 
lan = langid.classify(a) 

好了,我返回法国。除此之外,它既不是法语也不是葡萄牙语,为什么它返回不同的结果?!

在循环row绑定到元组与单个项,即('tags',) - ,其中'tags'代表的单词列表。因此(在Python 3中)返回"('tags',)",它就是传递给langid.classify()的这个字符串(包括单引号,逗号和大括号)。如果您使用的是Python 2,则字符串将变为"(u'tags',)"

现在,我不确定这是否解释了不同的语言检测结果,并且我在Python 2中的测试显示它没有,但它是数据库源数据和普通字符串数据之间的明显区别。

可能会出现一些编码问题。数据如何存储在数据库中?文本数据应该是UTF-8编码的。

+0

嘿,我在Python 3.3中工作,做'str(row)'不会返回'(tags),'。我遍历一个数据库,每行得到不同的结果。如果每一行都是'(标签)',那么每一行的语言应该是相同的。 我想我也在看编码问题。我用'FIELD NAME,TEXT'创建了这个字段,默认情况下,这个编码从SQLite设置为'UTF-8'。我收到的数据是来自flickr API的屏幕截图,但也根据他们的文档'UTF-8'。 – Stophface 2015-03-26 07:13:54

+0

通过'tags'我的意思是标签字段的内容...不是字面字符串'标签'。你正在传递一个字符串化的元组来分类。我怀疑这个问题是由这个问题引起的,但是把它作为字符串传递是错误的,你应该修正这个问题以消除它作为问题。 – mhawke 2015-03-26 07:28:33

+0

误会。我现在通过它:'a =''.join(row)'。更好? – Stophface 2015-03-26 09:07:19