2012-10-23 17 views
15

Sto usando NLTKword_tokenizer per dividere una frase in parole.Tokenizzazione di parole arabe utilizzando NLTK

Voglio tokenize questa frase:

في_بيتنا كل شي لما تحتاجه يضيع ...ادور على شاحن فجأة يختفي ..لدرجة اني اسوي نفسي ادور شيء 

Il codice che sto scrivendo è:

import re 
import nltk 

lex = u" في_بيتنا كل شي لما تحتاجه يضيع ...ادور على شاحن فجأة يختفي ..لدرجة اني اسوي نفسي ادور شيء" 

wordsArray = nltk.word_tokenize(lex) 
print " ".join(wordsArray) 

Il problema è che la funzione word_tokenize non si divide con le parole. Invece, si divide per lettere in modo che l'output sia:

"ف ي _ ب ي ت ن ا ك ل ش ي ل م ا ت ح ت ا ج ه ي ض ي ع ... ا د و ر ع ل ى ش ا ح ن ف ج أ ة ي خ ت ف ي .. ل د ر ج ة ا ن ي ا س و ي ن ف س ي ا د و ر ش ي ء" 

Qualche idea?

Quello che ho raggiunto finora:

provando il testo in here, sembrava essere token da lettere. Inoltre, tuttavia, altri tokenizer l'hanno tokenizzato correttamente. Significa che lo word_tokenize è solo per l'inglese? Funziona per la maggior parte delle funzioni di NLTK?

+1

Does http://stackoverflow.com/questions/7386856/python-arabic-nlp aiutare? (E uno stemmer http://nltk.org/api/nltk.stem.html#module-nltk.stem.isri) –

risposta

6

Io consiglio sempre di utilizzare nltk.tokenize.wordpunct_tokenize. Puoi provare molti dei tokenizer NLTK allo http://text-processing.com/demo/tokenize/ e vedere di persona.

+0

qual è la differenza tra la maggior parte di questi tokenizer? e questo significa che la maggior parte delle funzioni NLTK non funzionerà con l'arabo? –

+2

TreebankWordTokenizer è formato sul testo del journal di wall street, che è ascii, quindi non funziona mai bene sul testo unicode. Il PunctWordTokenizer è addestrato su più varietà di testo, ma trovo che sia meno prevedibile rispetto al resto di loro, che usano espressioni regolari, rendendole utilizzabili in qualsiasi lingua, con risultati prevedibili. – Jacob

+0

NLTK in generale funziona bene con arabo, e qualsiasi testo Unicode, è solo che alcuni modelli si aspettano ascii, e quindi non vanno bene con unicode. – Jacob

0

questo è l'uscita ottengo con il mio codice, ma mi ricordo unicode non va bene in Python 2 e ho usato 3,5

nltk.word_tokenize('في_بيتنا كل شي لما تحتاجه يضيع ...ادور على شاحن فجأة يختفي ..لدرجة اني اسوي نفسي ادور شيء ') 

[ 'في_بيتنا', 'كل', 'شي ' 'لما', 'تحتاجه', 'يضيع', ' ... ', 'ادور', 'على', 'شاحن', 'فجأة', 'يختفي', '..لدرجة', 'اني', 'اسوي', 'نفسي', 'ادور', 'شيء']

Problemi correlati