我在Python的http://nlp.stanford.edu/software/segmenter.shtml处使用Stanford Segmenter。对于中文分割器,每当遇到英语单词时,它都会将单词一一分割为多个字符,但是我想在分割完成后将这些字符保持在一起。
例如:
你好abc我好
目前在细分之后将变为
你好 a b c 我 好
但我希望它成为
你好 abc 我 好
有没有办法教分割器做到这一点?有这个设置吗?
我对此一无所获,并试图通过从文本中拉出英文字符,然后在分割完成后将它们放回去的方式,共同尝试一种方法(花了6个小时)来完成此操作,但我意识到这非常很难以有效的方式做到这一点。任何帮助,将不胜感激。
最佳答案
我不了解混合语言文本中的标记化,因此我建议使用以下技巧:遍历文本,直到找到英文单词;该词之前的所有文本都可以由中文分词器分词;英文单词可以附加为另一个标记;重复。下面是代码示例。
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)。
关于python - 如何在斯坦福中文解析器中不将英语拆分为单独的字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30425877/