【问题标题】:Counting and averaging words in sentences计算和平均句子中的单词
【发布时间】:2017-03-06 22:47:46
【问题描述】:

我必须使用 Python 来打印文本文件的每个句子中的单词数和平均单词长度。我不能使用 NLTK 或 Regex 来完成这项作业。

文件中的句子以句点、感叹号或问号结尾。连字符、破折号或撇号不会结束句子。引号不结束句子。而且,有些句号不会结束句子。例如,Mrs.、Mr.、Dr.、Fr.、Jr.、St. 都是常见的缩写。

例如,如果输入文本是:

"My name? Bob. Your name? Lily! Hi there"

...输出应该是:

[(no. of words, mean length of words in sentence1),
(no. of words, mean length of words in sentence2),
...]

代码:

p= ("Mrs.","Mr.","St.")
def punct_after_ab(texts):
    new_text = texts
    for abb in p:
        new_text = new_text.replace(abb,abb[:-1])
    return print(new_text)

import numpy
def word_list(text):
    special_characters = ["'",","]
    clean_text = text
    for string in special_characters:
        clean_text = clean_text.replace(string, "")
    count_list = [len(i) for i in clean_text.split()]
    count = [numpy.mean(count_list)]
    return print((count_list),(count))

但是当我测试这个时,它并没有拆分句子。

【问题讨论】:

  • 我投票结束这个问题,因为 SO 不是免费的编码服务。
  • 您似乎希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(输出、回溯等)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask
  • 添加了我的代码,但仍在寻找一些指导......
  • @Bala 我根据你的更新更新了我的答案

标签: python tokenize lexical-analysis


【解决方案1】:

使用类似于.split(' ') 的内容来分隔单词(在所述情况下使用空格),然后使用数组运算和基本数学/统计来获得答案。如果您将问题更新为更具体并包含一些您自己的代码,我愿意相应地修改我的答案。

您会发现,在这个网站上,如果您对所提出的问题不付出太多努力,您将不会得到很有帮助的答案。在提问之前尝试做一些研究并编写尽可能多的代码。这使人们更容易帮助你,他们会更愿意。到目前为止,您似乎只是想找人为您做作业。

更新:

您的代码大部分都可以正常工作,只是您需要更改一些内容。我玩弄了你所拥有的东西,我能够将文本分解成句子数组,你可以继续对它们进行统计。

输入.txt:

My name? Mr. Bob. Your name? Mrs. Lily!
What's up?

test.py(我使用 python 3.6):

    def punct_after_ab(texts):
        p = ("Mrs.", "Mr.", "St.")
        new_text = texts
        for abb in p:
            new_text = new_text.replace(abb,abb[:-1])
        return new_text


    def clean_text(text):
        special_characters = ["'", ","]
        clean_text = text
        for string in special_characters:
            clean_text = clean_text.replace(string, "")
        return clean_text


    def split_sentence(text):
    #Initialize vars
    sentences = []
    start = 0
    i = 0

    # Loop through the text until you find punctuation,
    # then add the sentence to the final array
    for char in text:
        if char == '.':
            sentences.append(text[start:i+1])
            start = i + 2
        if char == '?':
            sentences.append(text[start:i+1])
            start = i + 2
        if char == '!':
            sentences.append(text[start:i+1])
            start = i + 2
        i += 1

    # Print the sentences to console
    for sentence in sentences:
        print(sentence)


def main():
    # Ask user for file name
    file = input("Enter file name: ")
    # Open the file and strip newline chars
    fd = open(file).read()
    fd = fd.strip("\n")

    # Remove punctuation that doesn't delineate sentences
    text = punct_after_ab(fd)
    text = clean_text(text)

    # Separate sentences
    split_sentence(text)

# Run program
if __name__ == '__main__':
    main()

我能够得到它以输出以下文本:

Enter file name: input.txt
My name?
Mr Bob.
Your name?
Mrs Lily!
Whats up?

Process finished with exit code 0

从那里您可以轻松地进行句子统计。我刚刚输入了这个,所以你可能想要仔细阅读它并清理一下。我希望这会有所帮助。

【讨论】:

  • 可能是,但我相信这对用户来说是一个更大的问题,因为这个问题对于一个合法的答案来说不够具体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多