2016-08-26 4 views
3

J'utilise regexp_tokenize() pour revenir jetons d'un texte arabe sans signes de ponctuation:regexp_tokenize et texte arabe

import re,string,sys 
from nltk.tokenize import regexp_tokenize 

def PreProcess_text(Input): 
    tokens=regexp_tokenize(Input, r'[،؟!.؛]\s*', gaps=True) 
    return tokens 

H = raw_input('H:') 
Cleand= PreProcess_text(H) 
print '\n'.join(Cleand) 

Il a bien fonctionné, mais le problème est quand je tente d'imprimer le texte.

La sortie du texte ايمان،سعد:

?يم 
    ?ن 
    ? 
    ? 
    ? 

mais si le texte est en anglais, même avec un signe de ponctuation arabe, il imprime le bon résultat.

La sortie du texte hi،eman:

 hi 
    eman 
+0

Quelle est la sortie prévue pour votre texte arabe? – NullUserException

+0

C'est probablement le fait que l'arabe est imprimé à l'envers. En perl, je reçois la sortie de ايمان et, سعد – sln

+0

Vous utilisez Python 2.x, n'est-ce pas? En Python 3.4, je reçois 'ايمان' et' سعد' quand j'entre 'ايمان, سعد' –

Répondre

2

Lorsque vous utilisez raw_input, les symboles sont codés sous forme d'octets.

Vous devez le convertir en une chaîne Unicode avec

H.decode('utf8') 

Et vous pouvez garder votre regex:

tokens=regexp_tokenize(Input, r'[،؟!.؛]\s*', gaps=True) 
+1

oui le regex a travaillé, merci! – Eman