2017-05-07 218 views
1

製作一個協調程序。我希望它能告訴我一句話是什麼語句,所以如果我有:Python如何打印一個單詞所在的句子?

「Hello world。我的名字是Nathan,我需要Python的幫助,我很困惑,並且有任何幫助。

我希望它能打印每個單詞來自哪個句子。我已經完成了它計算的總次數出現的每個字,並在它旁邊,我需要的句子號碼是從何而來,所以它會顯示:「A」與

a. word {word appearance count:sentence number} 

按列表順序工作(如帶有字母的編號列表)。從第一句的一個例子是

a. help {2:2,3} 

這是我目前擁有的代碼:

word_counter = {} 
sent_num = {} 
linenum = 0 
wordnum = 0 
counter = 0 

#not working 
for word in f.lower().split('.'): 
    if not word in sent_num: 
     sent_num[word] = [] 
    sent_num[word].append(f.find(wordnum)) 


#working correctly 
for word in f.lower().split(): 
if not word in word_counter: 
     word_counter[word] = [] 
     #if the word isn't listed yet, adds it 
    word_counter[word].append(linenum) 

for key in sorted(word_counter): 
    counter += 1 
    print (counter, key, len(word_counter[key]), len(sent_num[key])) 
+0

'linenum'總是'0' –

+0

這是一個廣泛的問題,因爲有很多你的代碼錯誤。沒有完全重寫就很難回答。我不認爲這個答案對後代有用。將問題分成更小的更具體的區塊,閱讀如何創建[mcve],並可能提出一個新問題。 –

回答

0

這是很簡單,在每個句子,那麼每個單詞重複那句話,並創建一個映射的字典{word: [sentence, ...]}

In [1]: 
d = {} 
for i, sent in enumerate(f.lower().split('. ')): 
    for w in sent.strip().split(): 
     d.setdefault(w, []).append(i) 
d 

Out[1]: 
{'am': [2], 
'and': [1, 2], 
'any': [2], 
'appreciated.': [2], 
'confused': [2], 
'hello': [0], 
'help': [1, 2], 
...} 

給出的列表是單詞的所有出現,然後你可以得到的計通過調用len(),如:

In [2]: 
len(d['help']) 

Out[2]: 
2 
+0

我沒有問題的人投票,但請留言,如果你這樣做。沒有反饋很難改進。 – AChampion

+0

這大多工作!非常感謝!我現在唯一的問題是,我無法在「測試」後刪除這段時間。這是打破我的代碼。顯然我不能從字典中剝離('。')?它正在計算'測試'和'測試'。作爲兩個不同的詞。 – Ember

+0

你可以嘗試'split('。')'(句號後沒有空格),你可能需要'去掉'任何多餘的空格。 – AChampion

0

在你的代碼,當你看完整的句子,你只在'.'分裂。你需要每一個句子分成的話,在那之後:

for sentence in f.split('.'): 
    for word in sentence.lower().split(): 
     if not word in sent_num: 
      sent_num[word] = [] 
     sent_num[word].append(f.find(wordnum)) 

或類似的規定方式,這取決於你想看看和算什麼。

+0

他們只想知道它是否在句子中。 –

相關問題