我将尝试使用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']
为什么分词器也会分割我期望的标记"U.S.A","U.S."? 如何解决这个问题?
我的正则表达式:https://regex101.com/r/dS1jW9/1
'[USA\.]{4,}|[\w]+'
也可以匹配............
。在字符类中放入一个单独的\w
并转义字符类内的点是没有必要的。 - Wiktor Stribiżew