使用python

时间:2016-02-26 21:40:55

标签: python regex

问题是:

  

编写一个脚本,将文本读入文件,将其分成句子,然后   一个接一个地在屏幕上打印句子。不使用   为你做分句分裂的图书馆。

以下是我的代码:

import re
fr=open('input.txt')
text=fr.read().strip()
fr.close()
Ms=re.finditer(' +([A-Z].+?\.) ',text)
for i in Ms:
    print i.group(1)

结果没有显示。实际上我知道什么可能是错的,因为文件的第一句话前面没有多个空格,但我无法弄清楚如何修复它。

以下是我的意见:

二甲双胍将在6-8周内达到完全有效。它有三个主要影响(http://en.wikipedia.org/wiki/Metformin#Mechanism4of_action)。

首先,它(经常)减少肝脏产生的血糖量,这可能会降低您的基础需求并帮助您禁食。

其次,二甲双胍增加胰岛素,信号传导导致胰岛素敏感性增加:http://care.diabetesjournals.org/content/27/1/281.full。 效果主要取决于您体内的肌肉质量。 胰岛素抵抗也影响各种其他因素,但胰岛素的最大利用是对肌肉摄取葡萄糖。

第三,二甲双胍减少了消化过程中葡萄糖的吸收。我相信这种效应会引起一些胃病。

3 个答案:

答案 0 :(得分:1)

如果没有看到您的输入,很难发表评论,但请注意,您需要注意前导和尾随空格。在下面的示例中,第一个单词被遗漏,因为它没有前导空格,如果需要尾随空格,则会错过第二个单词。

>>> text = "See Spot run. Run, Spot, run."

>>> re.findall(' +([A-Z].+?\.)',text)

['Spot run.',' Run, Spot, run.']

>>> re.findall(' +([A-Z].+?\.) ',text)

['Spot run. ']

我们可以在角色课上做得更好,但你需要确切地确定句子的划分方式。

>>> re.findall('([\w, ]+\.)',text)

['See Spot run.', ' Run, Spot, run.']

>>> re.findall('[^.]+\.',text)

['See Spot run.', ' Run, Spot, run.']

但是在一段时间内拆分会在许多情况下失败,例如示例输入中的URL或以下内容:

>>> re.findall('[^.]+\.',"See Dr. Spock run. Run, Spock, run.")

['See Dr.', ' Spock run.', ' Run, Spock, run.']

答案 1 :(得分:1)

假设文件input.txt具有以下内容:

  

二甲双胍将在6-8周内达到完全有效。它有三个主要影响(http://en.wikipedia.org/wiki/Metformin#Mechanism4of_action)。

     

首先,它(经常)减少肝脏产生的血糖量,这可能会降低您的基础需求并帮助您禁食。

     

其次,二甲双胍增加胰岛素,信号传导导致胰岛素敏感性增加:http://care.diabetesjournals.org/content/27/1/281.full。效果主要取决于您体内的肌肉质量。胰岛素抵抗也影响各种其他因素,但胰岛素的最大利用是对肌肉摄取葡萄糖。

     

第三,二甲双胍减少了消化过程中葡萄糖的吸收。我相信这种效应会引起一些胃病。

以下是代码:

import re
with open('input.txt','r') as f: fin = f.read()
print re.sub('\.\s+', '.\n', fin)

输出:

Metformin will reach full effectiveness in 6-8 weeks.
It has three primary effects (http://en.wikipedia.org/wiki/Metformin#Mechanism4of_action).
First, it (frequently) reduces the amount of blood sugar produced by your liver, this presumably will decrease your basal needs and help your fasting numbers.
Second, metformin increases the insulin, signaling resulting in increased insulin sensitivity: http://care.diabetesjournals.org/content/27/1/281.full.
The effect is primarily on the muscle mass in your body.
Insulin resistance also affects all kinds of other stuff, but the biggest utilization of insulin is in the uptake of glucose to muscles.
Third, Metformin decreases the absorption of glucose during digestion.It is this effect that I believe causes some of the gastric issues.

由于格式不佳(缺少两个句子之间的空格),一个句子没有正确解析,应该在文本文件中修复。

更新话虽如此,请尝试以下文本文件:

import re
with open('input.txt','r') as f: fin = f.read()
print re.sub('\.\s*([A-Z])', '.\n\g<1>', fin)

答案 2 :(得分:0)

试试这个:

import re

with open('input.txt', 'r') as f:
    data = f.read()

print('\n'.join(re.split(r'\n', data, re.M)))