【问题标题】:Seperating/tokenize dots from words but not from digits in Python从单词中分离/标记点,而不是从 Python 中的数字中分离/标记点
【发布时间】:2018-04-05 11:37:21
【问题描述】:

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

"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ö . "

【问题讨论】:

  • 可能是 XY 问题。如果这应该是 NLP 管道的一部分,您应该使用适当的标记器。就像在 NLTKspacy 中一样(我知道 spacy 内置了德国模型;不确定 NLTK。)。

标签: python tokenize


【解决方案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 套装中的适当标记器来处理这些类型的任务是个好主意。

【讨论】:

    【解决方案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 .
    

    【讨论】:

    • 谢谢!正则表达式确实工作得很好,此外我可以很容易地修改它来解决一些类似的问题:)
    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多