【问题标题】:Python Create List of Words Per Sentence and Calculate Mean and Place in CSV FilePython 创建每个句子的单词列表并计算 CSV 文件中的均值和位置
【发布时间】:2016-10-18 15:32:28
【问题描述】:

我希望计算每个句子的单词数,计算每个句子的平均单词数,并将该信息放入 CSV 文件中。这是我到目前为止所拥有的。我可能只需要知道如何计算句号之前的单词数。我也许可以从那里弄清楚。

#Read the data in the text file as a string
with open("PrideAndPrejudice.txt") as pride_file:
    pnp = pride_file.read()

#Change '!' and '?' to '.'
for ch in ['!','?']:
    if ch in pnp:
        pnp = pnp.replace(ch,".")

#Remove period after Dr., Mr., Mrs. (choosing not to include etc. as that often ends a sentence although in can also be in the middle)
pnp = pnp.replace("Dr.","Dr")
pnp = pnp.replace("Mr.","Mr")
pnp = pnp.replace("Mrs.","Mrs")

【问题讨论】:

标签: python csv


【解决方案1】:

将字符串拆分为某个字符的字符串列表:

pnp = pnp.split('.')

然后我们可以将这些句子中的每一个拆分成一个字符串(单词)列表

pnp = [sentence.split() for sentence in pnp]

然后我们得到每个句子中的单词数

pnp = [len(sentence) for sentence in pnp]

那么我们可以使用statistics.mean来计算均值:

statistics.mean(pnp)

要使用statistics,您必须将import statistics 放在文件的顶部。如果您不认识我重新分配 pnp 的方式,请查看列表推导。

【讨论】:

    【解决方案2】:

    您可能对字符串的 split() 函数感兴趣。您似乎正在编辑文本以确保所有句子都以句号结尾,并且每个句点都以句子结尾。

    因此,

    pnp.split('.')
    

    将为您提供所有句子的列表。一旦你有了这个列表,对于列表中的每个句子,

    sentence.split() # i.e., split according to whitespace by default
    

    会给你一个句子中的单词列表。

    开始就够了吗?

    【讨论】:

      【解决方案3】:

      你可以试试下面的代码。

      numbers_per_sentence =  [len(element) for element in (element.split() for element in pnp.split("."))]
      mean = sum(numbers_per_sentence)/len(numbers_per_sentence)
      

      但是,对于真正的自然语言处理,我可能会推荐更强大的解决方案,例如 NLTK。您执行的文本操作(替换“?”和“!”,删除“博士”、“先生”和“夫人”之后的逗号)可能不足以 100% 确定逗号始终是句子分隔符(并且您的文本中没有其他句子分隔符,即使它恰好适用于傲慢与偏见)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 2015-08-18
        • 2020-04-25
        相关资源
        最近更新 更多