Python 得到一个完整的unicode句子
我试图解析一个句子,比如Python 得到一个完整的unicode句子,python,nlp,pyparsing,text-segmentation,Python,Nlp,Pyparsing,Text Segmentation,我试图解析一个句子,比如Base:Lote Numero 1,Marcelo T de Alvear 500。Demanda:otras palabras。我想:首先,将文本按句点分割,然后,使用冒号前面的任何内容作为冒号后面句子的标签。 现在我有以下定义: from pyparsing import * unicode_printables = u''.join(unichr(c) for c in xrange(65536)
Base:Lote Numero 1,Marcelo T de Alvear 500。Demanda:otras palabras。
我想:首先,将文本按句点分割,然后,使用冒号前面的任何内容作为冒号后面句子的标签。
现在我有以下定义:
from pyparsing import *
unicode_printables = u''.join(unichr(c) for c in xrange(65536)
if not unichr(c).isspace())
def parse_test(text):
label = Word(alphas)+Suppress(':')
value = OneOrMore(Word(unicode_printables)|Literal(','))
group = Group(label.setResultsName('label')+value.setResultsName('value'))
exp = delimitedList(
group,
delim='.'
)
return exp.parseString(text)
这是一种工作方式,但它删除了unicode字符(以及字母以外的任何字符),我想我希望将值作为一个完整的句子,而不是这样:'value':[(([u'Lote',u'Numero',u'1',','u'Marcelo',u'T',u'de',u'Alvear',u'500',{}),1)
是解决这个问题的简单方法吗?您应该查看哪个提供了对ICU提供的富Unicode文本库的访问,包括提供句子查找器的类。要直接回答您的问题,请使用originalTextFor
包装您的值定义,这将返回matc提供的字符串片段hing标记作为单个字符串来自。您还可以添加解析操作,如:
value.setParseAction(lambda t : ' '.join(t))
但这会在每个项目之间明确地放置一个空格,而可能没有空格(在单词后面有一个“,”或多个空格。originalTextFor
将为您提供准确的输入子字符串。但更简单的是,如果您只是阅读“:”之后的所有内容,则可以使用restOfLine
。(当然,最简单的方法就是使用split(“:”)
,但我想您是在问如何使用pyparsing实现这一点。)
还有几点需要注意:
xxx.setResultsName('yyy')
可以缩短为仅xxx('yyy')
,从而提高解析器定义的可读性
- 您将值定义为
one或more(Word(unicode_可打印文件)| Literal(','))
有几个问题。首先,“,”将包含在unicode\u可打印文件中的字符集中,因此,“,”将包含在任何已解析的单词中。解决此问题的最佳方法是将excludeChars
参数用于Word
,以便您的句子单词不包含逗号:一个或多个(Word(unicode_printables,excludeChars=',')|',')
。现在您还可以排除其他可能的标点符号,如“;”,“-”,等等。只需将它们添加到excludeChars字符串中即可。(我刚刚注意到,您正在使用“.”作为分隔符列表的分隔符
——要使其起作用,您还必须将“.”作为排除字符。)Pyparsing在这方面与正则表达式不同——如果下一个字符继续与当前标记匹配,它不会进行任何前瞻性操作来尝试匹配解析器中的下一个标记。这就是为什么您必须自己做一些额外的工作来避免读太多。通常,像一个或多个(Word)这样的开放式操作(unicode_printables))
很可能会耗尽输入字符串的全部剩余部分
很有趣,我会尝试用PyICU做一些测试,看看它是否合适。我认为Paul McGuire的[1]符合你的要求。[1]:很好,这将帮助我在我的定义中处理unicodes,但不会给我整个句子,对吗?是的。这是朝着正确方向迈出的一步,对吗?因此,不要使用单词(alphanums)
,您可以调用Word(unicodePrintables)
编辑问题以反映这一点。