我有一個具有以下格式的 XML 檔案:
<JMdict>
...
<entry>
<ent_seq>2232410</ent_seq>
<k_ele>
<keb>筆おろし</keb>
</k_ele>
<k_ele>
<keb>筆下ろし</keb>
</k_ele>
<k_ele>
<keb>筆降ろし</keb>
<ke_inf>&iK;</ke_inf>
</k_ele>
<r_ele>
<reb>ふでおろし</reb>
</r_ele>
<sense>
<pos>&n;</pos>
<pos>&vs;</pos>
<gloss>using a new brush for the first time</gloss>
</sense>
<sense>
<pos>&n;</pos>
<pos>&vs;</pos>
<gloss>doing something for the first time</gloss>
</sense>
<sense>
<pos>&n;</pos>
<pos>&vs;</pos>
<gloss>man losing his virginity (esp. to an older woman)</gloss>
</sense>
</entry>
...
</JMdict>
鏈接到整個 XML 檔案: http: //ftp.edrdg.org/pub/Nihongo/JMdict_e.gz
這基本上是一本電子日文/英文詞典。有很多入口標簽。我正在嘗試創建一個搜索函式,該函式將根據任何 keb、reb 和光澤標簽中的文本值回傳 ent_seq 編號。
我有下面的代碼可以完成我需要做的事情,但速度有點慢(438 毫秒)。然后,此序列號將用于在另一個資料集中查找資料,如果我打算在 Web 應用程式中使用它,我希望它更快。有辦法嗎?
from xml.etree import ElementTree as ET
tree = ET.parse("../../resources/JMdict_e.xml")
root = tree.getroot()
search_term = '筆おろし'
seq_tags = []
for dictionary in root.iter('JMdict'):
for child in dictionary:
for grandchild in child:
if grandchild.tag == 'ent_seq':
ent_seq = grandchild.text
for greatgrandchild in grandchild:
if greatgrandchild.tag in ['keb','reb','gloss']:
if greatgrandchild.text == search_term:
seq_tags.append(ent_seq)
print(seq_tags)
任何幫助和提示將不勝感激。
uj5u.com熱心網友回復:
使用 xpath 在同一個運算式中搜索超過 1 個元素(可能是具有超過 2 個條件的 AND/OR 運算式)
from lxml import etree
import time
import io
st = time.process_time()
parser = etree.XMLParser(compact=True, huge_tree=True, resolve_entities=False)
with open('/home/luis/tmp/JMdict_e', 'rb') as f:
et = time.process_time()
res = et - st
print('read file:', res, 'seconds')
tree = etree.parse(f, parser)
et = time.process_time()
res1 = et - res
print('parse:', res1, 'seconds')
slist = tree.xpath('//entry[k_ele/keb = "筆おろし"]/ent_seq | //entry[r_ele/reb = "エヌきょう"]/ent_seq')
#slist = tree.xpath('//entry[1]/k_ele/keb')
et = time.process_time()
res2 = et - res1
print('xpath:', res, 'seconds')
#print(slist)
for d in slist:
print( d.text)
et = time.process_time()
res = et - st
print('CPU Execution time:', res, 'seconds')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494812.html
標籤:Python python-3.x xml 元素树
