从单词中分离/标记点,但不是Python中的数字

时间:2017-10-24 15:30:03

标签: python tokenize

我试图将德语句子中的点与单词分开,而不是用数字分隔,例如:

"Der 17. Januar war ein toller Tag. Heute ist es auch schön."

应以

结尾
"Der 17. Januar war ein toller Tag . Heute ist es auch schön . "

但我无法找到解决方案。我试图在Python中使用re模块但没有成功。

line = re.sub(r'[^0-9]+\.', ' . ', line)

将以

结尾
"Der 17. Januar war ein toller Ta . Heute ist es auch schö . "

2 个答案:

答案 0 :(得分:2)

你必须在正则表达式中使用正面的背后隐藏:

import re
s = "Der 17. Januar war ein toller Tag. Heute ist es auch schön."
final_string = re.sub("(?<=[a-zA-Z])\.(\s|$)", ' . ', s)
print(final_string)

输出:

Der 17. Januar war ein toller Tag . Heute ist es auch schön .

答案 1 :(得分:1)

以防万一,您不想使用正则表达式。这是另一种选择。

def tokenize_using_dot(s_input):
    s_list = s_input.split()

    for idx in range(len(s_list)):
        if s_list[idx][-1] == '.' and not s_list[idx][0:-1].isdigit():
            s_list[idx] = s_list[idx].replace('.', ' .')
    return' '.join(s_list)


s = "Der 17. Januar war ein toller Tag. Heute ist es auch schön."
print(tokenize_using_dot(s))

输出:

 Der 17. Januar war ein toller Tag . Heute ist es auch schön .

正如@phg评论的那样,从nltk套装中使用适当的标记生成器来处理这些类型的任务是个好主意。