2015-03-25 1 views
0

У меня есть база данных, из которой я читаю. Я хочу идентифицировать язык в определенной ячейке, определенной столбцом. Я использую библиотеку langid для python.Различия в идентификации языка 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) 

Ну, что возвращает меня французский. Кроме того, он не является ни французским, ни португальским, почему он возвращает разные результаты ?!

ответ

1

В цикле row привязан к кортежа с помощью одного элемента, т.е. ('tags',) - где 'tags' обозначает список слов. str(row) поэтому (в Python 3) возвращает "('tags',)", и именно эта строка (включая одинарные кавычки, запятые и фигурные скобки) передается в langid.classify(). Если вы используете Python 2, строка становится "(u'tags',)".

Теперь я не уверен, что это объясняет другой результат определения языка, и мое тестирование на Python 2 показывает, что это не так, но это очевидная разница между данными базы данных с базами данных и данными простой строки.

Возможно, в игре есть проблема с кодировкой. Как хранятся данные в базе данных? Текстовые данные должны кодироваться в кодировке UTF-8.

+0

Эй, я работаю в Python 3.3 и выполняю 'str (row)' does not return '(tags),'. Я перебираю базу данных и получаю разные результаты для каждой строки. Если каждая строка будет «(теги)», тогда язык должен быть одинаковым для каждой строки. Я думаю, что я также рассматриваю вопросы кодирования. Я создаю поле с именем «FIELD NAME, TEXT», которое по умолчанию задает кодировку от SQLite до 'UTF-8'. Данные, которые я получаю, являются скриншотами из API flickr, но в соответствии с их документацией 'UTF-8'. – Stophface

+0

Под «тегами» я подразумеваю содержимое поля тегов ... Не буквальная строка 'tags'. Вы передаете строчный кортеж для классификации. Я сомневаюсь, что проблема вызвана этим, но неправильно передавать это как строку, и вы должны исправить это, чтобы устранить ее как проблему. – mhawke

+0

Недоразумение. Я передаю его так: 'a = '. .join (row)'. Лучше? – Stophface

Смежные вопросы