2015-02-23 32 views
12

NLTK'nin varsayılan belirteci, nltk.word_tokenizer, zincirleri iki belirteci, bir cümle belirteçleri ve daha sonra cümleler üzerinde çalışan bir sözcük belirteci. Kutunun dışında oldukça iyi bir iş çıkarıyor.NLTK'nın varsayılan belirtecini dizeleri yerine yayılmak için nasıl kullanırım?

>>> nltk.word_tokenize("(Dr. Edwards is my friend.)") 
['(', 'Dr.', 'Edwards', 'is', 'my', 'friend', '.', ')'] 

Ben dize jeton yerine orijinal dizeye uzaklıklar dizilerini dönmek zorunda dışında bu aynı algoritmayı kullanmak istiyorum.

Ofset ile, özgün dizeye dizin görevi görebilen 2-kat demek istiyorum. [0: 1] s çünkü burada Mesela ben

>>> s = "(Dr. Edwards is my friend.)" 
>>> s.token_spans() 
[(0,1), (1,4), (5,12), (13,15), (16,18), (19,25), (25,26), (26,27)] 

olurdu "(" dır, s [1: 4] benzeri "Dr" ve

mi var tek NLTK. o bunu yapar arayabilir veya kendi ofset aritmetik yazmak zorunda?

+0

Ne demek "offset" ile. Belki listede dize endeksi? yani: 'Dr. index 1'dir. – felipsmartins

+0

Ofset ile ne demek istediğimi açıklığa kavuşturmak için düzenlenmiştir. –

cevap

7

Evet, çoğu Tokenizers nltk bir yöntem çağrıda span_tokenize ama maalesef Simgeleştirici kullandığınız buna gerek yoktur. varsayılan olarak

word_tokenize işlevi uses a TreebankWordTokenizer .TreebankWordTokenizer impl. Emisyonun oldukça sağlam bir implementation vardır, ancak şu anda span_tokenize, önemli bir yöntem için bir uygulama yoksundur.

TreebankWordTokenizer için span_tokenize hiçbir uygulama görmüyorum, bu yüzden kendi uygulamanızı gerçekleştirmeniz gerekeceğine inanıyorum. Alt sınıflandırma TokenizerI, bu işlemi biraz daha az karmaşık hale getirebilir.

starting pointstarting point olarakspan_tokenize yöntemini yararlı bulabilirsiniz.

Umarım bu bilgi yardımcı olur.

+1

Burada üç saniyelik bir versiyonu çektim: https://gist.github.com/ckoppelman/c93e4192d9f189fba590e095258f8f33. Herhangi bir yardım veya tavsiye takdir edilir – Charles

İlgili konular