2016-05-13 36 views
3

我是新來編碼的,所以原諒我,如果我問一些已經回答的問題,但相信我確實搜索了答案並找不到答案。Python - 計算給定文本中的單詞

我有一個任務確定給定文本中有多少給定的單詞。單詞可以是一個洞或其他單詞的一部分。信箱沒有關係。如果單詞在文本中出現多次,則應只計算一次。 到目前爲止,我好不容易纔到這一點:

​​

與該代碼我設法得到1最終計數爲所有樹文本和中,只有三分之一是確定的。

正如我所看到的,我的第一個問題是,我的text.lower()沒有做任何事情,我強硬它應該降低所有情況。

我的第二個問題是,在第一種情況下,「are」在「aresjfhdskfhskd」中找不到,但在第三種情況下,「sum」在「ipsum」中找到。這兩個詞都是大字的一部分,但第一個沒有找到,第二個是。 此外,在第二種情況下,結果應該是2,因爲香蕉和香蕉是相似但不同的。

在此先感謝。

+5

我還沒有確定對第二和第三個問題,但'text.lower()'沒有修改字符串。它_returns_字符串,但小寫。使用'text = text.lower()' – Arc676

+4

最重要的錯誤是'count = + 1'與'count + = 1'。 – Joost

+0

謝謝你們倆。這解決了問題的一部分。 – DejanJovanovic

回答

3

使用sum和發電機的表情,這似乎是最簡單的解決方案:

text = text.lower() 
count = sum(word in text for word in words) 
# bools are cast to ints (0, 1) here 
+0

雖然正確(並解決了問題),但這個解決方案似乎並沒有真正解決問題,即理解錯誤和學習。類型強制技巧不會幫助那裏。 Add:如果你要做的很少,你也可以在表達式中使用'text.lower()'。 – Joost

+0

非常感謝。這解決了我的代碼中的所有問題。 – DejanJovanovic

+0

@Joost當然你是對的。真正的(平庸)問題已經發布並在評論中正式提出。儘管如此,爲什麼不建議更簡潔易讀並且可能有啓發性的替代方案呢? – schwobaseggl

1

你的代碼是有部分錯誤。試試這個:

def count_words(text, words): 
    count = 0 
    lower_text = text.lower() 
    for w in words: 
     if w in lower_text: 
      count += 1 

    print count 

count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"}) 
count_words("Bananas, give me bananas!!!", {"banana", "bananas"}) 
count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", 
        {"sum", "hamlet", "infinity", "anything"}) 

這隻會在Python 2.7的工作,雖然3+你需要改變最終printprint(count)所以如果你使用Python。

+0

也適用。非常感謝不同的方法。 – DejanJovanovic

2

第一個字符串是不可變的,所以text.lower()本身不會改變text,但會返回新的實例 - 小寫。另一個問題是,如果if a in base檢查存在,沒有信息多少次......

def count_words(text, words): 
    count = 0 
    lower_text = text.lower() 
    for w in words: 
     print w + " - " + str(lower_text.count(w)) 

print "1" 
count_words("How aresjfhdskfhskd you?", {"how", "are", "you", "hello"}) 
print "2" 
count_words("Bananas, give me bananas!!!", {"banana", "bananas"}) 
print "3" 
count_words("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.", 
        {"sum", "hamlet", "infinity", "anything"}) 
+0

我現在知道我做錯了什麼。謝謝你們。 – DejanJovanovic

+1

@DejanJovanovic沒問題 - Schwobaseggl的答案是更多Pythonic,但我認爲你需要爲它做好準備。如果您需要良好的信息來源 - 請點擊此鏈接http://www.diveintopython。淨/ :) –

+0

謝謝隊友。我肯定會跟着它,因爲我知道我有多少不知道。 :) – DejanJovanovic

相關問題