Bu akşam pyparsing
'u kullanmaya başladım ve çok etkili bir şekilde çalıştığım bazı kaynakları tanımlayan karmaşık bir dilbilgisi yapıyorum. Çok kolay ve çok güçlüydü. Ancak, ParsedResults
ile çalışmakta sorun yaşıyorum. İç içe geçmiş belirteçleri buldukları sırayla yineleyebilmem gerekir ve bunu biraz sinir bozucu buluyorum. Sorunumu basit bir durumla ifade ettim: Görebildiğim kadarıyla, bu işe yaramalı mıyım? İşte çıktı şöyledir:`pyparsing`: 'ParsedResults` üzerinde yineleme
<div>
<sentence>
<word>Lorem</word>
<word>ipsum</word>
<direct_speech>
<word>dolor</word>
<word>sit</word>
</direct_speech>
<word>amet,</word>
<word>consectetur.</word>
</sentence>
</div>
word ['Lorem', 'ipsum', 'amet,', 'consectetur.']
direct_speech [['dolor', 'sit']]
Traceback (most recent call last):
File "./test.py", line 27, in <module>
print item.getName(), item.asList()
AttributeError: 'str' object has no attribute 'getName'
XML çıktı keşke gibi dize aynen ayrıştırılır belirtmek görünüyor, ama bunu yeniden, örneğin, cümlenin üzerinde yineleme olamaz.
İhtiyacım olanı yapmanın bir yolu var mı?
Teşekkürler!
düzenleme:
Bunu kullanıyorum: Ben dize farklı türde ayıramadığından
for item in r.sentence:
if isinstance(item, basestring):
print item
else:
print item.getName(), item
ama, beni çok tüm bu yardımcı olmuyor. İşte biraz genişletilmiş örnektir:
word = pp.Word(pp.alphas + ',.')('word*')
number = pp.Word(pp.nums + ',.')('number*')
direct_speech = pp.Suppress('“') + pp.Group(pp.OneOrMore(word | number))('direct_speech*') + pp.Suppress('”')
sentence = pp.Group(pp.OneOrMore(word | number | direct_speech))('sentence')
test_string = 'Lorem 14 ipsum “dolor 22 sit” amet, consectetur.'
r = sentence.parseString(test_string)
for i, item in enumerate(r.sentence):
if isinstance(item, basestring):
print i, item
else:
print i, item.getName(), item
çıktısı: çok yararlı
0 Lorem
1 14
2 ipsum
3 word ['dolor', '22', 'sit']
4 amet,
5 consectetur.
değil. word
ve number
ile direct_speech
öğesinin word
? Etiketli olduğunu ayırt edemiyorum?!
Açıkçası bir şeyleri özlüyorum. Tüm yapmak istediğim: Bu farklı yaklaşıyor muyum?