【问题标题】:Python how can I print which sentence a word is in?Python如何打印一个单词在哪个句子中?
【发布时间】:2017-05-07 04:52:33
【问题描述】:

制作索引程序。我想让它告诉我一个单词在什么句子中,所以如果我有:

“你好,世界。我的名字是 Nathan,我需要 Python 方面的帮助。我很困惑,感谢任何帮助。”

我希望它打印每个单词来自哪个句子。我已经完成了它计算每个单词出现的总次数,在它旁边我需要它来自的句子编号,所以它显示为:

a. word {word appearance count:sentence number}

带有“a”。作为列表顺序工作(像编号列表但带有字母)。第一句话的一个例子是

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]))

【问题讨论】:

  • linenum 始终是0
  • 这是一个广泛的问题,因为您的代码有很多问题。不完全重写就很难回答。我认为答案对后代没有用。将问题拆分为更小更具体的块,阅读有关如何创建minimal reproducible example 的信息,并可能提出一个新问题。

标签: python printing frequency


【解决方案1】:

遍历每个句子然后是该句子中的每个单词并创建映射{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

【讨论】:

  • 我对人们投反对票没有意见,但如果你这样做,请留言。没有反馈就很难改进。
  • 这主要是有效的!太感谢了!我现在唯一的问题是我无法删除“测试”后的时间段。这破坏了我的代码。显然我不能从字典中剥离('。')?它正在计算“测试”和“测试”。作为两个不同的词。
  • 你可以试试split('.')(句号后面没有空格),你可能需要strip()任何多余的空格。
  • split('.')拆分的一个问题是像'Mr.米勒不错。 ...'。更简洁但更复杂的方法是句子边界检测系统,例如通过使用 spaCy 或 NLTK 解析文本。
  • 同意,但鉴于 OP 的经验,我猜这可能是一个基本练习。
【解决方案2】:

在您的代码中,当您查看完整的句子时,您只是在'.' 上进行拆分。您需要将每个句子分成单词,然后:

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))

或类似的方式,取决于您想要查看和计算的内容。

【讨论】:

  • 他们只想知道它是否在句子中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 2018-04-05
  • 1970-01-01
  • 1970-01-01
  • 2020-08-30
相关资源
最近更新 更多