我在Python中使用http://nlp.stanford.edu/software/segmenter.shtml的Stanford Segmenter。对于中文分词,每当遇到英文单词时,它会将单词逐个分成多个字符,但我想在分割完成后将字符保持在一起。
例如:
你好abc我好
目前将在分割后成为此
你好 a b c 我 好
但我希望它成为
你好 abc 我 好
有没有办法让分段师这样做?有这个设置吗?
我对此进行了搜索并且没有回答,并试图通过从文本中提取英文字符然后在分割完成后将其重新放入,然后实现了一种方式(花费6个小时)来完成此操作以有效的方式很难做到这一点。对此的任何帮助将不胜感激。
答案 0 :(得分:3)
我不知道混合语言文本中的标记化,所以我建议使用以下hack:浏览文本,直到找到英文单词;这个单词之前的所有文本都可以被中文标记符标记化;英语单词可以作为另一个标记追加;重复。下面是代码示例。
import re
pat = re.compile("[A-Za-z]+")
for sentence in text:
sent_tokens = []
prev_end = 0
for match in re.finditer(pat, sentence):
print match.start(0), match.end(0), match.group(0)
chinese_part = sentence[prev_end:match.start(0)]
sent_tokens += tokenize(chinese_part)
sent_tokens.append(match.group(0))
prev_end = match.end(0)
last_chinese_part = sentence[prev_end:]
sent_tokens += tokenize(last_chinese_part)
print sent_tokens
我认为效率与中文标记化器的唯一标记化相当,因为唯一的开销是由正则表达式的应用引起的,正则表达式实际上只是一个有限状态自动机并且用作O(n)。
答案 1 :(得分:0)
在应用斯坦福标记器之后,我只是搜索任何模式,其中一系列数字或英文字母用空格填充并以这种方式删除空格:
re.sub(r'(?<=\w)\s(?=\w)', '', u'\u5982\u4f55 \u767b\u5f55 C o n c u r \u7cfb\u7edf \uff1f\n')
给出了:
u'\u5982\u4f55 \u767b\u5f55 Concur \u7cfb\u7edf \uff1f\n'