0

this is a part of my code where I try to tokenize a greek paragraph.

doc = "Ο υπουργός Οικονομικών Γιάννης Στουρνάρας διαβίβασε την Τετάρτη στον πρόεδρο της αρμόδιας Αρχής κατά του ξεπλύµατος µαύρου χρήµατος, Παναγιώτη Νικολούδη, το αίτημα του υπουργού Υγείας Αδωνι Γεωργιάδη για κατά προτεραιότητα έλεγχο του «πόθεν έσχες» των διοικητών και υποδιοικητών που υπηρέτησαν στο Εθνικό Σύστημα Υγείας από το 2000 έως και σήμερα."

tokens = nltk.WordPunctTokenizer().tokenize(doc)

The result is missing of few words for example "Αρχής" or "έσχες".

If I use this online tool for the same tokenize module, the words are still there.

online tool

What I have understant until now is that after this code, I have another line where I remove all words with < 3 characters.

And if I print the tokens, the word "έσχες" for example tokenized as ["έ","σχ","ες"]. Why those words tokenized too? I thought that this module split sentences into the words.

4

1 回答 1

1

It works when you decode your input to Unicode before passing it to NLTK. Assuming it's encoded as UTF-8:

>>> doc = doc.decode("utf-8")
>>> print(doc)
Ο υπουργός Οικονομικών Γιάννης Στουρνάρας διαβίβασε την Τετάρτη στον πρόεδρο της αρμόδιας Αρχής κατά του ξεπλύµατος µαύρου χρήµατος, Παναγιώτη Νικολούδη, το αίτημα του υπουργού Υγείας Αδωνι Γεωργιάδη για κατά προτεραιότητα έλεγχο του «πόθεν έσχες» των διοικητών και υποδιοικητών που υπηρέτησαν στο Εθνικό Σύστημα Υγείας από το 2000 έως και σήμερα.
>>> tokens = nltk.WordPunctTokenizer().tokenize(doc.decode("utf-8"))
>>> for t in tokens:
...     print(t, end=" ")
... print()
... 
Ο υπουργός Οικονομικών Γιάννης Στουρνάρας διαβίβασε την Τετάρτη στον πρόεδρο της αρμόδιας Αρχής κατά του ξεπλύµατος µαύρου χρήµατος , Παναγιώτη Νικολούδη , το αίτημα του υπουργού Υγείας Αδωνι Γεωργιάδη για κατά προτεραιότητα έλεγχο του « πόθεν έσχες » των διοικητών και υποδιοικητών που υπηρέτησαν στο Εθνικό Σύστημα Υγείας από το 2000 έως και σήμερα . 

EDIT: Ok, do decode("iso-8859-7") instead.

于 2013-08-14T19:33:41.630 回答