我目前正在使用Python在语料库中执行预处理,用于执行自然语言处理然后进行分类。我对使用任何库作为NLTK不感兴趣。在我学习的时候,我更喜欢这次自己做。
问题是,如果逗号之前或后面没有数字,我必须在句子中的逗号之间添加空格:
Input: "My car costs $10,000."
Output: "My car costs $10,000."
Input: "Oh, I forgot my keys."
Output: "Oh , I forgot my keys."
到目前为止我所拥有的是:
re.sub(r"(,+)", r' \g<1> ', sentence)
问题在于它没有考虑“数字约束”。我也测试过:
re.sub(r"[^\d](,+)", r' \g<1> ', sentence)
它确实忽略了数字,但是当检查普通句子(没有数字)时,它也匹配逗号前面的字符,它被空格替换为:
Input: "Oh, I forgot my keys."
Output: "O , I forgot my keys."
答案 0 :(得分:2)
试试这个:
re.sub(r"(?<![\d])(,+)(?![\d])", r' \g<1> ', sentence)
这是使用名为lookahead and lookbehind的东西。这是有效的,因为前瞻或后瞻匹配的值不是匹配的一部分,因此不会被sub替换。
答案 1 :(得分:1)
使用负向前瞻和后视:
>>> r = re.compile(r'(?<!\d)(,)(?!=\d)')
>>> r.sub(r' \1', "My car costs $10,000.")
'My car costs $10,000.'
>>> r.sub(r' \1', "Oh, I forgot my keys.")
'Oh , I forgot my keys.'
答案 2 :(得分:0)