gpt4 book ai didi

python - NLTK - nltk.tokenize.RegexpTokenizer - 正则表达式未按预期工作

转载 作者:太空狗 更新时间:2023-10-30 00:54:17 27 4
gpt4 key购买 nike

我正在尝试使用 RegexpTokenizer 对文本进行分词。

代码:

from nltk.tokenize import RegexpTokenizer
#from nltk.tokenize import word_tokenize

line = "U.S.A Count U.S.A. Sec.of U.S. Name:Dr.John Doe J.Doe 1.11 1,000 10--20 10-20"
pattern = '[\d|\.|\,]+|[A-Z][\.|A-Z]+\b[\.]*|[\w]+|\S'
tokenizer = RegexpTokenizer(pattern)

print tokenizer.tokenize(line)
#print word_tokenize(line)

输出:

['U', '.', 'S', '.', 'A', 'Count', 'U', '.', 'S', '.', 'A', '.', 'Sec', '.', 'of', 'U', '.', 'S', '.', 'Name', ':', 'Dr', '.', 'John', 'Doe', 'J', '.', 'Doe', '1.11', '1,000', '10', '-', '-', '20', '10', '-', '20']

预期输出:

['U.S.A', 'Count', 'U.S.A.', 'Sec', '.', 'of', 'U.S.', 'Name', ':', 'Dr', '.', 'John', 'Doe', 'J.', 'Doe', '1.11', '1,000', '10', '-', '-', '20', '10', '-', '20']

为什么 tokenizer 也将我预期的标记“U.S.A”、“U.S.”分开?我该如何解决这个问题?

我的正则表达式:https://regex101.com/r/dS1jW9/1

最佳答案

重点是您的 \b 是退格字符,您需要使用原始字符串文字。此外,字符类中的文字管道也会弄乱您的输出。

这按预期工作:

>>> pattern = r'[\d.,]+|[A-Z][.A-Z]+\b\.*|\w+|\S'
>>> tokenizer = RegexpTokenizer(pattern)
>>> print(tokenizer.tokenize(line))

['U.S.A', 'Count', 'U.S.A.', 'Sec', '.', 'of', 'U.S.', 'Name', ':', 'Dr', '.', 'John', 'Doe', 'J.', 'Doe', '1.11', '1,000', '10', '-', '-', '20', '10', '-', '20']

请注意,将单个 \w 放入字符类中是没有意义的。此外,您不需要转义字符类中的每个非单词字符(如点),因为它们在那里大多被视为文字字符(仅 ^] , -\ 需要特别注意)。

关于python - NLTK - nltk.tokenize.RegexpTokenizer - 正则表达式未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39144991/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com