之前已经有一个提问了: https://www.v2ex.com/t/340752#reply13
关于这个问题搜索了挺久还不是很明白,于是开了这个帖子。
我想做英文词组分词(可能不这么叫),比如 I love New York,我希望分词出来的是 I / love / New York,而不是:I / love / New / York 。New York 分开原本的意思就变了。
中文分词有非常多的工具,比如结巴( https://github.com/fxsjy/jieba ),但是找英文词组分词工具就非常难(我甚至不知道用什么单词去搜索,比如是 Tokenizer 、Chunking 、还是 text segmentation ),请问英文有没有比较方便可以直接分词的工具。
比如斯坦福的 stanza ( https://github.com/stanfordnlp/stanza ) 可以用于分词。中文分词结果没问题,但是英文只是按照空格做分词。
text = """英国首相约翰逊 6 日晚因病情恶化。"""
zh_nlp = stanza.Pipeline('zh')
doc = zh_nlp(text)
for sent in doc.sentences:
print("Sentence:" + sent.text) # 断句
print("Tokenize:" + ' '.join(token.text for token in sent.tokens)) # 中文分词
它的输出结果是分词后的结果,这没问题:
Tokenize:英国 首相 约翰逊 6 日 晚因 病情 恶化 , 被 转入 重症 监护 室 治疗 。
但是英文分词:
import stanza
nlp = stanza.Pipeline(lang='en', processors='tokenize', tokenize_no_ssplit=True)
doc = nlp('This is a sentence.\n\nThis is a second. This is a third.')
for i, sentence in enumerate(doc.sentences):
print(f'====== Sentence {i+1} tokens =======')
print(*[f'id: {token.id}\ttext: {token.text}' for token in sentence.tokens], sep='\n')
输出结果为:
====== Sentence 1 tokens =======
id: (1,) text: This
id: (2,) text: is
id: (3,) text: a
id: (4,) text: sentence
id: (5,) text: .
====== Sentence 2 tokens =======
id: (1,) text: This
id: (2,) text: is
id: (3,) text: a
id: (4,) text: second
id: (5,) text: .
id: (6,) text: This
id: (7,) text: is
id: (8,) text: a
id: (9,) text: third
id: (10,) text: .
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.