在Python中,从单词中分离/标记点,但不从数字中分离/标记点
我试图将德语句子中的点与单词分开,而不是与数字分开,例如:在Python中,从单词中分离/标记点,但不从数字中分离/标记点,python,tokenize,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
"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ö . "
您必须在正则表达式中使用正向查找:
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)
以防万一,你不想使用正则表达式。这里有一个替代方案
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中合适的标记器 也许是XY问题。如果这应该是NLP管道的一部分,那么应该使用适当的标记器。就像在或(我知道spacy内置了一个德国模型;不确定NLTK。)。谢谢!正则表达式工作得非常好,此外,我可以轻松地修改它以解决一些类似的问题:)
Der 17. Januar war ein toller Tag . Heute ist es auch schön .