在句子中添加缺少的字符

时间:2016-11-25 03:25:49

标签: python nlp text-processing

我在python中处理文本并且有几个缺少字符的情况,如:

_ = self.navigationController?.popViewController(animated: true)

在test_list中缺少所有撇号,我写了一个函数来重新添加它:

test_list = ['people can t believe','we couldn t be happier','let s not forget']

这种作品:

def add_apostrophe(sentense):
    words = sentense.split()
    fixed_s = []
    flag = False
    buffer_ = ''
    for w in reversed(words):
        if flag:
            fixed_s.append(''.join([w,buffer_]))
            flag = False
            buffer_ = ''
        elif  w in ['t','s']:
            flag = True
            buffer_ = "'{}".format(w)
        else:
            fixed_s.append(w)
    fixed_s = ' '.join(reversed(fixed_s))
    return fixed_s

但是我认为这可能会在某些情况下打破句子,我还没有对它进行详尽的测试。  此外,这似乎是一个常见的问题,是一些库恢复缺失的撇号和其他一些字符?

1 个答案:

答案 0 :(得分:2)

你可以用正则表达式来做。但这可能不是详尽的报道。

import re
test_list = ['people can t believe','we couldn t be happier','let s not forget']
print [re.sub(r"(\s?)([a-zA-Z]+)\s([a-zA-Z]{1})\s",r"\1\2'\3 ", a) for a in test_list]

输出:

["people can't believe", "we couldn't be happier", "let's not forget"]

正则表达式解释:

(\ S')([A-ZA-Z] +)\ S([A-ZA-Z] {1})\ S

(\ s?) - 匹配并捕获0或1个空格作为组1 ([a-zA-Z] +) - 匹配和捕获1个或多个字母作为组2 \ s - 匹配1个空格
([a-zA-Z] {1}) - 匹配并捕获1个字母作为组3 \ s - 匹配1个空格

\ 1,\ 2和\ 3 - 第1组,第2组和第3组