2014-02-01 3 views
0

Я бегу следующий код на IDLE (Python), и я хочу, чтобы ввести арабский строку и получить вытекающие для него, но на самом деле это не работаетPython ISRIStemmer для арабского текста

" >>> от импорта nltk.stem.isri ISRIStemmer

">>> й = ISRIStemmer()

" >>> ш = 'حركات'

">>> join = w.decode ('Windows-1256')

« >>> print st.stem (join) .encode ('Windows-1256'). Decode ('utf-8').

результат выполнения его тот же текст в ш, который является 'حركات', который не является стебель

но когда сделать следующее:

«>>> печать st.stem (и 'اعلاميون')

результат удалось и возвращает шток, который является 'علم'

почему проходя переменную на шток() функция не возвращает стержень.

ответ

4

Хорошо, я решил проблему сам с помощью следующего:

ш = 'حركات'

st.stem (w.decode ('UTF-8'))

и это дает корень правильно, который является "حرك"

0

Ну, обратите внимание, что ваши две строки на самом деле отличаются только лишь «и» в начале второй строки:

w = 'حركات' 
w2 = u'اعلاميون' 

Но что крошечные «и» вся разница: w является кодировка UTF-8 строки (символов по умолчанию в Python), а w2 - строка в Юникоде.

Следовательно, все, что вам действительно нужно сделать, это убедиться, что ваша строка определяются как строка Unicode, а затем вы можете использовать функцию stem обычно без какого-либо дополнительного этапа декодирования:

w = u'حركات' 
print st.stem(w) 
0

есть новый свет arabicstemmer здесь разработано с использованием рамки для снежного кома

0

Этот код, указанный выше, не будет работать в Python 3, потому что мы пытаемся декодировать объект, который уже декодирован.Таким образом, нет необходимости расшифровывать с UTF-8.

Вот новый код, который должен работать только штрафом в Python 3.

import nltk 
from nltk.stem.isri import ISRIStemmer 
st = ISRIStemmer() 
w= 'حركات' 
print(st.stem(w)) 
Смежные вопросы