2017-05-15 67 views
-2
(0, u'0.559*"delivery" + 0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.010*"city" + 0.009*"way"') 
(1, u'0.397*"package" + 0.073*"address" + 0.055*"time" + 0.047*"customer" + 0.045*"apartment" + 0.037*"delivery" + 0.031*"number" + 0.026*"item" + 0.021*"support" + 0.018*"door"') 
(2, u'0.190*"time" + 0.127*"order" + 0.113*"minute" + 0.075*"pickup" + 0.074*"restaurant" + 0.031*"food" + 0.027*"support" + 0.027*"delivery" + 0.026*"pick" + 0.018*"min"') 
(3, u'0.072*"code" + 0.067*"gps" + 0.053*"map" + 0.050*"street" + 0.047*"building" + 0.043*"address" + 0.042*"navigation" + 0.039*"access" + 0.035*"point" + 0.028*"gate"') 

如何從上述每個元組中提取前3個單詞(基於旁邊的數字)?如何從python中的元組中提取單詞

輸出應爲:

(0,delivery area mile) 
(1,package address time) 
(2,time order minute) 
(3, code gps map) 
+1

顯示期望的結果 – RomanPerekhrest

+0

請[編輯]你的問題,以顯示你期待什麼。這似乎是一個很好的潛在問題,但不是那樣。答案可能回答或不回答你的問題... –

+0

更新我的問題,以反映輸出 – Arman

回答

1

我將:

  • 根據" + "(正則表達式可被需要,如果的空間的數量而變化)根據係數的浮點值創建通過分裂元組(係數,值),則根據"*"
  • 排序那些元組,保持最高3
  • 降的係數並加入字符串(汽提的過程中引號)

在(絡合物)的一行:

l = [(0, u'0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.559*"delivery" + 0.010*"city" + 0.009*"way"'), 
(1, u'0.073*"address" + 0.055*"time" + 0.397*"package" + 0.047*"customer" + 0.045*"apartment" + 0.037*"delivery" + 0.031*"number" + 0.026*"item" + 0.021*"support" + 0.018*"door"'), 
(2, u'0.190*"time" + 0.127*"order" + 0.113*"minute" + 0.075*"pickup" + 0.074*"restaurant" + 0.031*"food" + 0.027*"support" + 0.027*"delivery" + 0.026*"pick" + 0.018*"min"'), 
(3, u'0.047*"building" + 0.072*"code" + 0.067*"gps" + 0.053*"map" + 0.050*"street" + 0.043*"address" + 0.042*"navigation" + 0.039*"access" + 0.035*"point" + 0.028*"gate"')] 

result = [" ".join(x[1].strip('"') for x in sorted((e.split("*") for e in sl[1].split(" + ")),key=lambda x:float(x[0]),reverse=True)[:3]) for sl in l] 

print(result) 

結果:

['delivery area mile', 'package address time', 'time order minute', 'code gps map'] 

(請注意,我已經打亂了項目的順序測試_係數排序)

1

使用re.findall()str.join()函數的溶液:

import re 

l = [ 
(0, u'0.559*"delivery" + 0.124*"area" + 0.018*"mile" + 0.016*"option" + 0.012*"partner" + 0.011*"traffic" + 0.011*"hub" + 0.011*"thanks" + 0.010*"city" + 0.009*"way"'), 
(1, u'0.397*"package" + 0.073*"address" + 0.055*"time" + 0.047*"customer" + 0.045*"apartment" + 0.037*"delivery" + 0.031*"number" + 0.026*"item" + 0.021*"support" + 0.018*"door"'), 
(2, u'0.190*"time" + 0.127*"order" + 0.113*"minute" + 0.075*"pickup" + 0.074*"restaurant" + 0.031*"food" + 0.027*"support" + 0.027*"delivery" + 0.026*"pick" + 0.018*"min"'), 
(3, u'0.072*"code" + 0.067*"gps" + 0.053*"map" + 0.050*"street" + 0.047*"building" + 0.043*"address" + 0.042*"navigation" + 0.039*"access" + 0.035*"point" + 0.028*"gate"') 
] 

result = [tuple([t[0], ' '.join(re.findall(r'"([a-z]+)"', t[1])[0:3])]) for t in l] 
print(result) 

輸出:

[(0, 'delivery area mile'), (1, 'package address time'), (2, 'time order minute'), (3, 'code gps map')] 
+0

,假設係數處於遞減順序。否則它不起作用 –

+0

@ Jean-FrançoisFabre,我在開始時也考慮過分類項目,但似乎「第一個」3是有意的 – RomanPerekhrest

相關問題