2017-05-07 217 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

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

相关问题