2016-03-26 16 views
1

Python ile yeni ve Tokenization ataması var Girdi, cümleli bir .txt dosyası ve çıktı, Tokens ile .txt dosyası ve Token demek istediğimde: simple word, ',' '!' '?' '.' '"' Python Tokenization

Ben bu işlevi vardır: Girdi: Merhaba ya dedi: ya dedi Elemnt gibi kelime olabilir, ya da Noktalamasız bir kelimedir" StrForCheck i ayırmak isteyen Noktalamasız bir dizidir Yani TokenFile dan: my çıktı dosyası

def CheckIfSEmanExist (Elemnt, StrForCheck, TokenFile): o bulursa Noktalama eğer

Kod Noktalama Array üzerinde döngüler ve
FirstOrLastIsSeman = 0 

for seman in StrForCheck: 
    WordSplitOnSeman = Elemnt.split(seman) 
    if len(WordSplitOnSeman) > 1: 
     if Elemnt[len(Elemnt)-1] == seman: 
      FirstOrLastIsSeman = len(Elemnt)-1 
     elif Elemnt[0] == seman: 
      FirstOrLastIsSeman = 1 

if FirstOrLastIsSeman == 1: 
    TokenFile.write(Elemnt[0]) 
    TokenFile.write('\n') 
    TokenFile.write(Elemnt[1:-1]) 
    TokenFile.write('\n') 

elif FirstOrLastIsSeman == len(Elemnt)-1: 
    TokenFile.write(Elemnt[0:-1]) 
    TokenFile.write('\n') 
    TokenFile.write(Elemnt[len(Elemnt)-1]) 
    TokenFile.write('\n') 

elif FirstOrLastIsSeman == 0: 
    TokenFile.write(Elemnt) 
    TokenFile.write('\n') 

i kontrol ilk harf ya da son mektup oldu Word'de ve çıkış dosyamda her satır farklı bir satır

yazıyor. Ama Benim Sorun şu kelimeler hariç tüm metin üzerinde harika çalışıyor: Jobs ", public" oluşturuldu polis" sadece dikkate almak gerekir her hattı üzerinden

for l in open('some_file.txt', 'r'): 
    ... 

yinelediğinden bir çizgi içinde ne yapacağını o

cevap

1

Not. olarak başlar ve giderek

def tokenizer(l): 
    prev_i = 0 
    for (i, c) in enumerate(l): 
     if c in ',.?!- ': 
      if prev_i != i: 
       yield l[prev_i: i] 
      yield c 
      prev_i = i + 1 
    if prev_i != 0: 
     yield l[prev_i: ] 

O "tükürür" belirteçleri:

aşağıdaki işlevi göz önünde bulundurun.

l = "hello, hello, what's all this shouting? We'll have no trouble here" 
for tok in tokenizer(l): 
    print tok 

hello 
, 

hello 
, 

what's 

all 

this 

shouting 
? 

We'll 

have 

no 

trouble 

here 
+0

ama aynı zamanda benim çıkış olmalıdır cezanızı göre, benim dosya anlam noktalama yazmak gerekiyor:: Bu gibi kullanabilirsiniz helo, merhaba, al l ne Bu bağırarak? – Rania

+0

@Rania Güncelleme. –