Python 标记化和标记文本
这是一个简单的扫描器,它根据特定规则标记文本,并标记标记Python 标记化和标记文本,python,nlp,Python,Nlp,这是一个简单的扫描器,它根据特定规则标记文本,并标记标记 处理未知字符并将其标记为 不知道 是否有一种推荐的方法/库可以在 完成类似的结果,保持相对简单 例如: 输出: ps!已定义的函数可能会尝试对令牌进行进一步分类。重新扫描程序按照提供的顺序匹配模式。因此,您可以在结尾提供一个非常通用的模式来捕获“未知”字符: (r".", unknown) 屈服 [('This', 'a'), ('is', 'a'), ('a', 'a'), ('little', 'a'), ('test', 'a
ps!已定义的函数可能会尝试对令牌进行进一步分类。重新扫描程序按照提供的顺序匹配模式。因此,您可以在结尾提供一个非常通用的模式来捕获“未知”字符:
(r".", unknown)
屈服
[('This', 'a'), ('is', 'a'), ('a', 'a'), ('little', 'a'),
('test', 'a'), ('?', 'p'), ('With', 'a'), ('7', 'rn'), (',', 'p'),
('9', 'rn'), ('and', 'a'), ('6', 'rn'), ('.', 'p'), ('\xa0', 'uk'),
('-', 'uk'), ('\xaf', 'uk')]
您的一些模式是
unicode
,其中一个是str
。确实,在Python2中,要匹配的模式和字符串可以是unicode
或str
然而:
Unicode字符串和8位字符串不能混合:也就是说,不能混合
将Unicode字符串与字节模式匹配,反之亦然
因此,最好不要将它们混在一起,即使是在Python2中
我认为您的代码非常简单(除了
superscript
regex.Eek!)。我不知道有哪家图书馆能使它更简单 谢谢你的回答。我将尝试对上标做些什么:)
(r".", unknown)
import re
def alpha(scanner,token):
return token, 'a'
def numeric(scanner,token):
return token,'rn'
def punctuation(scanner,token):
return token, 'p'
def superscript(scanner,token):
return token, 'sn'
def unknown(scanner,token):
return token, 'uk'
scanner = re.Scanner([
(r"[a-zA-Z]+", alpha),
(r"[.,:;!?]", punctuation),
(r"[0-9]+", numeric),
(r"[\xb9\u2070\xb3\xb2\u2075\u2074\u2077\u2076\u2079\u2078]", superscript),
(r"[\s\n]+", None), # whitespace, newline
(r".", unknown)
])
tokens, _ = scanner.scan("This is a little test? With 7,9 and 6. \xa0-\xaf")
print tokens
[('This', 'a'), ('is', 'a'), ('a', 'a'), ('little', 'a'),
('test', 'a'), ('?', 'p'), ('With', 'a'), ('7', 'rn'), (',', 'p'),
('9', 'rn'), ('and', 'a'), ('6', 'rn'), ('.', 'p'), ('\xa0', 'uk'),
('-', 'uk'), ('\xaf', 'uk')]