2016-08-09 14 views
1

我是Python新手,遇到了一個問題。 我用StanfordNER在Python標記文本,名稱實體的輸出是這樣的:使用特定標籤加入列表的部分內容並在Python中創建新列表

[('Micheal', 'PERSON'), 
('Jaf', 'PERSON'), 
('Bin', 'PERSON'), 
('Aloo', 'PERSON'), 
('and', 'O'), 
('Purno', 'PERSON'), 
('Yusgiantoro', 'PERSON'), 
('USA', 'LOCATION'), 
('Ibrahim', 'PERSON'), 
('Baah', 'PERSON'), 
('Alolom', 'PERSON'), 
('or', 'O'), 
('Ahmad', 'PERSON'), 
('Fahad', 'PERSON'), 
('Al', 'PERSON'), 
('Ahmad', 'PERSON'), 
('in', 'O'), 
('the', 'O'), 
('Sabah', 'PERSON'), 
('Purnomo', 'PERSON'), 
('Khorabi', 'PERSON'), 
('Elie', 'PERSON')] 

我想加盟每個人的名字和姓氏,並得到一個看起來像列表:

persons_names = ['Micheal Jaf Bin Aloo', 
     'Purno Yusgiantoro', 
     'Ibrahim Baah Alolom', 
      'Ahmad Fahad Al Ahmad ' 
     'Sabah Purnomo Khorabi Elie'] 
+0

你的意思是你的結果 '邁克爾' 是 '邁克爾'?你的意思是所有名稱和連接器都是字符串,還是都是變量名? (如果沒有變量名稱,那麼你的數據語法就不好。)你的數據行是'myList = ...'嗎?結果變量'persons_names'? –

+1

請發佈實際輸出,您發佈的內容充滿語法錯誤。 –

+0

修復了您的示例輸入和預期輸出中的語法錯誤。下次請小心,不要手工輸入這些東西。你給了我們很多額外的工作要做,因爲在我們開始之前我們必須修復許多錯誤。 –

回答

0

你可以做

last=None 
grouped=[] 
for word,t in myList: 
    if t==last: 
     grouped[-1].append(word) 
    else: 
     grouped.append([t,word]) 
     last=t 
person_names=[" ".join(i[1:]) for i in grouped if i[0]=="PERSON"] 
+0

謝謝janbrohl,你的代碼工作得很好。 –

2

你發佈的問題不是有效的python對象。這很可能是某種東西的str版本。下面的代碼片段假設每個單詞的第一個元素被轉換爲一個字符串。

這個想法是使用itertools.groupby。它根據給定條件對相鄰元素進行分組,並一次返回一個組。剩下的就是將它們與空間結合在一起。

from itertools import groupby 

lst = [("Micheal", 'PERSON'),("Jaf", 'PERSON'), ("Bin", 'PERSON'),("Aloo", 'PERSON'),("and", 'O'),("Purno", 'PERSON'), ("Yusgiantoro", 'PERSON'),("USA", 'LOCATION'),("Ibrahim", 'PERSON'), ("Baah", 'PERSON'), ("Alolom", 'PERSON'),("or", 'O'),("Ahmad", 'PERSON'),("Fahad", 'PERSON'),("Al", 'PERSON'),("Ahmad", 'PERSON')] 

print [" ".join(x[0] for x in names) 
      for typ, names in groupby(lst, key=lambda x: x[1]) 
      if typ == "PERSON"] 

OUTPUT:

['Micheal Jaf Bin Aloo', 'Purno Yusgiantoro', 'Ibrahim Baah Alolom', 'Ahmad Fahad Al Ahmad'] 
+0

我非常感謝你的工作,沒有任何問題。 –

相關問題