如何在斯坦福中文考卷中不把英语分成几个字母

2024-05-18 12:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是Python中http://nlp.stanford.edu/software/segmenter.shtml处的Stanford Segmenter。对于中文分词器来说,每当遇到一个英文单词时,它会将单词一个一个地拆分成许多字符,但我希望在分割完成后将这些字符保持在一起。在

例如:

你好abc我好 

目前将成为这之后的细分

^{pr2}$

但我希望它变成

你好 abc 我 好

有没有一种方法可以教分节者做到这一点?有这个设置吗?在

我在google上搜索了一下,结果没有答案,我试着想出一种方法(花了6个小时)从文本中抽出英文字符,然后在分割完成后再放回原处,但我意识到要高效地完成这项工作是非常困难的。如果有任何帮助,我们将不胜感激。在


Tags: 方法httpnlp分词器software字符单词segmenter
2条回答

在应用Stanford标记器之后,我只需搜索数字或英文字母序列中有空格的任何模式,然后用这种方式删除空格:

re.sub(r'(?<=\w)\s(?=\w)', '', u'\u5982\u4f55 \u767b\u5f55 C o n c u r \u7cfb\u7edf \uff1f\n')

它给出了:

^{pr2}$

我不知道混合语言文本中的标记化,所以我建议使用以下方法:浏览文本,直到找到英文单词;这个单词之前的所有文本都可以用中文标记器标记;英语单词可以作为另一个标记附加;重复。下面是代码示例。在

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

我认为效率可以与中国的令牌化方法相媲美,因为唯一的开销是由应用regex引起的,而regex实际上只是一个有限状态自动机,起到O(n)的作用。在

相关问题 更多 >

    热门问题