我使用了一個 NLP 分塊器,它錯誤地將術語“C ”和“C#”拆分為:C (NN)、 (SYM)、 (SYM)、C (NN)、#(SYM)。
錯誤分塊的結果串列如下所示:
l = [['C', 'NN'], [' ', 'SYM'], [' ', 'SYM'], ['C', 'NN'], ['#', 'NN']]
我想對這個串列進行后處理,方法是識別每個串列的索引 0 中的字串,即“C”和下一行“ ”、“ ”或“#”。然后我想連接這些字串,這樣 'C',' ',' ' 通過簡單地將它們加在一起就變成了 'C '。這必須是通用的,因此它應該適用于包含多個不同單詞但仍連接所需字串的串列。
想要的結果:
l_desired = [['C ', 'NN'], ['C#', 'NN']]
我可以獨立識別串列中的專案(索引 0),但我不知道如何識別所需的序列。我的想法是使用該next()功能,盡管我不知道從哪里開始。
uj5u.com熱心網友回復:
您可以遍歷串列并檢查第一個元素是否為字母,在這種情況下作為新專案追加,否則更新最后一個專案:
from string import ascii_letters
letters = set(ascii_letters)
out = []
for e in l:
if e[0][0] in letters:
out.append(e.copy()) # making a copy not to affect original list
elif out: # this is to check that out is not empty (edge case)
out[-1][0] = e[0]
或者使用符號黑名單:
symbols = set(' #')
out = []
for e in l:
if e[0] in symbols and out:
out[-1][0] = e[0]
else:
out.append(e.copy())
輸出:
[['C ', 'NN'], ['C#', 'NN']]
uj5u.com熱心網友回復:
這是一個簡單的生成器實作,它將讀取原始串列作為迭代器并將其“標記化”(再次 - 天真):
def the_generator(l):
it = iter(l)
def get_tok():
x = it.next()
return (",".join(x),x)
while True:
tok1 = get_tok()
tok3 = None
if tok1[0] != 'C,NN':
yield tok1[1]
continue
tok2 = get_tok()
if tok2[0] == '#,NN':
yield ['C#','NN']
continue
if tok2[0] == ' ,SYM':
tok3 = get_tok()
if tok3[0] == ' ,SYM':
yield ['C ','NN']
continue
yield tok1[1]
yield tok2[1]
if tok3:
yield tok3[1]
l = [['Dog', 'NN'], ['C', 'NN'], [' ', 'SYM'], [' ', 'SYM'], ['C', 'NN'], ['#', 'NN'], ['C', 'NN'], [' ','SYM'], ['#', 'NN']]
for x in the_generator(l):
print(x)
輸出:
['Dog', 'NN']
['C ', 'NN']
['C#', 'NN']
['C', 'NN']
[' ', 'SYM']
['#', 'NN']
生成器不會一次轉換所有串列,僅在需要時轉換。要一次創建一個新串列,您可以執行list(the_generator(l)).
我正在將各個標記字串化join()以簡化比較。該while True回圈結束原來的迭代結束,自然的時候.next()加薪StopIteration。
uj5u.com熱心網友回復:
基本上,我只是一個一個地附加每個字母。
當與我們要查找的兩個字串(“C ”或“C#”)匹配時,它將將該值添加到串列中并重置字串。
l = [['C', 'NN'], [' ', 'SYM'], [' ', 'SYM'], ['C', 'NN'], ['#', 'NN']]
l_desired = []
x, y = "", ""
for item in l:
if x == "":
y = item[1]
x = item[0]
if x in ["C ", "C#"]:
l_desired.append([x, y])
x, y = "", ""
print("RESULT: " l_desired)
# RESULT: [['C ', 'NN'], ['C#', 'NN']]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/404637.html
標籤:
