Python在新闻文章中拆分第一句,并使用re获得实际句子

时间:2017-03-03 02:56:14

标签: python regex

对于大多数新闻文章,第一句话总是以一个位置开头,后跟连字符或逗号,例如

  吉隆坡:周一朝鲜和马来西亚对此表示强烈不满   调查杀害领导人金正恩的兄弟,作为   当他在瓜拉被致命袭击的那一刻出现了镜头   机场。

     

缅因州波特兰 - FairPoint Communications已向监管机构提出要求   允许停止为规范固定电话注册新客户   在斯卡伯勒,戈勒姆,沃特维尔,肯纳邦克和开普敦服务   伊丽莎白。

我正在尝试使用re来分隔后半部分,即主要句子,例如

  星期一,朝鲜和马来西亚对此表示反对   调查杀害领导人金正恩的兄弟,作为   当他在瓜拉被致命袭击的那一刻出现了镜头   机场。

我使用以下regrex将它们分开:

var food = gon.foods.filter(function(food) {
    return food.id === foodID;
})[0];

但这对一切都不起作用,第二句话的结果是:

  

['波特兰,缅因州\ xe2 \ x80 \ x94 FairPoint Communications问道   监管机构允许停止为新客户注册   斯卡伯勒,戈勒姆,沃特维尔的固定座机服务,   肯纳邦克和伊丽莎白角。']

与unicode有什么关系吗?或者我需要在重新代码中传递不同格式的连字符?

是否有更好的方法可以做到这一点?

感谢。

2 个答案:

答案 0 :(得分:2)

正如您所猜测的那样,问题是字符串中存在unicode字符,因为没有与{em}相同的ASCII字符PORTLAND, Maine — FairPoint Communications中的分隔符isn&# 39; t很好地解释并变为\xe2\x80\x94而不是\u2014

有一些选项可以让您按照自己的意愿行事:

  • 将源代码编码定义为unicode(将# -*- coding: utf-8 -*-设置为前两行之一)并将额外字符添加到正则表达式。
  • 您可以使用其中一个可用库将字符串转换为ACSII(请参阅convert a unicode string
  • 使用与re(sep = re.split(ur'-|:|--|\u2014', sent)
  • 兼容的unicode正则表达式
  • 或按照documentation中的建议使用regex模块。

答案 1 :(得分:0)

因为,你的第二个句子包含UNICODE个字符,所以在执行代码之前需要define source code encoding,因为python的默认编码是ASCII。而且,你试图用错误的字符--吐出句子。它必须是 (它是UNICODE)

python demo

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
sent = "PORTLAND, Maine — FairPoint Communications has asked regulators for permission to stop signing up new customers for regulated landline service in Scarborough, Gorham, Waterville, Kennebunk and Cape Elizabeth."
sep = re.split('-|:|—', sent)
print sep