2016-10-29 36 views
-1

我有一個列表如何提取從列表中的元素的必要字在Python

ingredient = ['2 tablespoons butter', 
'1 1/2 cups long-grain rice', 
'1/2 cup chopped onion', 
'1/2 cup chopped green bell pepper', 
'1 clove garlic, minced'] 

我想從每個元素中提取必要的話,做出的排行榜,以

['butter', 
'long-grain rice', 
'onion', 
'green bell pepper', 
'garlic'] 

有沒有辦法做到這一點?

+2

你是如何定義* 「基本字」 *?另外,你有什麼實際的嘗試,你堅持什麼? – UnholySheep

+0

那麼,我正在考慮擺脫所有的數字和數字。比方說,我可以製作一個特殊的數字列表和計數單詞,如果列表中的任何元素包含與特殊列表中的元素相匹配的字符串,則應刪除該元素的字符串。 – Jundong

+0

是的,你可以做到這一點。它會涉及到一些編碼(就像大部分與字符串操作一樣)。 – UnholySheep

回答

2

要從普通句子中提取數據,必須創建一個詞典(如真正的詞典(我們指的是含義))。你的情況,這本詞典必須包含這意味着過去時態樣choppedminced行動的相關數量一樣cupcupsgramgrams字和字等

現在遍歷第一個列表。 按空格拆分列表中的每個條目。 取下分裂名單如下:

  • 任何數字(INT,雙,浮法,等等)(您可以在它們之間解析1/2如數字與/字符)符合您的字典條目
  • 任何特殊字符(和逗號,分號等末端標記)
2

正如評論中所指出的那樣,「關鍵詞」的定義在空中。但是如果你想保留一些「非必要」的單詞,這個問題很簡單。首先,數據:

ingredients = ['2 tablespoons butter', 
'1 1/2 cups long-grain rice', 
'1/2 cup chopped onion', 
'1/2 cup chopped green bell pepper', 
'1 clove garlic, minced'] 

BAD_WORDS = { 
    'chopped', 'cup', 'cups', 'clove', 'tablespoons', 'minced' 
} 

然後,我們創建了幾個短助手函數來提高可讀性。第一個接受一個字符串並確定它是否包含一個數字。我們將利用這個扔出去的話就像'1/2'

def contains_digit(w): 
    return any(c.isdigit() for c in w) 

二是函數,它接受一個單詞,並確定它是否是普遍不好。一個單詞如果出現在BAD_WORDS或它包含一個數字,就很糟糕。

def is_bad(w): 
    return (w in BAD_WORDS) or contains_digit(w) 

然後,我們系統地刪除髒話:

extracted = [] 
for entry in ingredients: 
    words = [w.strip(',') for w in entry.split()] 
    remaining = [w for w in words if not is_bad(w)] 
    extracted.append(' '.join(remaining)) 

結果是:

['butter', 'long-grain rice', 'onion', 'green bell pepper', 'garlic'] 
+0

的問題非常感謝!我意識到我需要創建一個「基本單詞」列表。 – Jundong