2016-02-17 8 views
5

Her hedef sözcük için, bir sonraki hedef sözcükten önce görüntülenen sonraki sözcüklerin bir belgede belirlediklerime karşılık gelip gelmediğini kontrol etmek istiyorum. Eğer eşleşirse, çıktıya gerçek olmasını ve txt dosyasına yazılmasını istiyorum. Yanlış ise yanlış yazınız.python eşleme hedef sözcüğü

target word: document 
next words: set is complete 

Numune Doc:

Belge belirlediğim artık tamamlanmıştır

ben regex kullanıyorum

ancak yineleme yolu

import re 
re.findall("([a-zA-Z]+) " + tofind, txt) 

Hedef ve sonraki kelime gayet . Belge harika ayarlanmış. belgesi büyük, eksiksiz bir belge kümesi tamamlandı. Belge, tam bir belgedir, ancak tam değil.

Belge Bu parçada 6 kez görünür, ama dönüp çıkış aşağıda txt dosyasına istediğiniz

first document -> true 
second document -> false 
third document -> false 
fourth document -> true 
fifth document -> false 
sixth document -> false 
bu görev için normal ifadeleri kullanmayın

cevap

0

yerine, dize ekleme olacak yeterli. Basit bir şekilde bir örnek:

sampleDoc = "Document that I set is complete now. Document is great set. Is document is great complete document set is complete. Document is complete document is good but not complete.".lower() 
findWord = "document".lower() 
wordToFind = "set is complete".lower() 
splitList = sampleDoc.split(findWord) 
splitList.pop(0) 
for position,phrase in enumerate(splitList): 
    if wordToFind in phrase: 
     print("Document Number", str(position+1), "-> true") 
    else: 
     print("Document Number", str(position+1), "-> false") 

Biz bir liste göndererek, biz bulmaya çalışıyoruz her kelimeye metin bölün. Bu listeyi tekrarlıyoruz ve eğer önemli kelimeler bulunursa, doğru çıkıyoruz, yoksa yanlış çıkardık.

+0

@GarrettR Şaşırtıcı. Sadece sözcükleri oluşturdum ve çok fazla şey gerçekten işe yaramazdı. Daha mantıksal değişken isimleri kullanmak için güncelledik. (Hem eski hem de yeni sürümler benim Python'umda çalışır, bu yüzden bu sürümün de çalışmazsa bana söyleyin). –

0

kelime (şimdi adays, belge li, set öncesi) Bir başka deyişle bir parçası olmadıklarını sözcük sınırları ile sağlamak için regex ile çözüm: target eğer Açıkçası

import re 

text='Document that I set is complete now. Document is great set. Is document is great complete document set is complete. Document is complete document is good but not complete.' 

target='document' 
nextwords='set is complete' 

spat = re.compile(r'\b{}\b'.format(re.escape(target)), re.I) 
mpat = re.compile(r'\b{}\b'.format(re.escape(nextwords)), re.I) 

result = [True if (mpat.search(x)) else False for x in spat.split(text)[1:]] 
print(result) 

ve nextwords kelime olmayan karakterlerle başla ve bitir, kelime sınırlarını lookarounds ile değiştirmeniz gerekir.

0

Hepiniz document meydana 's ve set is complete sonu indeksi' eşleşti nesnelerin start ve end özelliklerini kullanarak s yıldız dizini de kullanabilirsiniz. Ve bir sonraki kelimenin son indeksinin document s'nin sürekli çiftlerinden biri olup olmadığını kontrol ederek beklenen eşleşmeleri elde edin.