Python - 从段落中提取句子

时间:2017-10-02 15:47:00

标签: python nltk

我是python&的新手可以使用一些帮助:

这只是一个示例:

我有一个字典(在列表中重复相同的键值:

list_dummy = [{'a': 1, 'b':"The house is great. I loved it.",'e':"loved,the"}, {'a': 3, 'b': "Building is white in colour. I liked it.",'e':"colour"}, {'a': 5, 'b': "She is looking pretty. She is in my college",'e':"pretty"}]

'b' - 由正文组成 'e' - 由单词组成(可以多于一个)

我想从'b'中提取句子,其中包含来自'e'的一个或多个单词。

我需要先将文本拆分为sent_tokenize&比需要提取。 Sent_tokenize仅将字符串作为输入。怎么办?

1 个答案:

答案 0 :(得分:0)

好吧,我似乎无法让nltk模块进行测试,但只要sent_tokenize()返回一个类似于句子字符串的列表,我认为应该做你想要做的事情(如果我理解正确):

ans = []
for d in list_dummy:
    tmp = sent_tokenize(d['b'])
    s = [x for x in tmp if any(w.upper() in x.upper() for w in d['e'].split(","))]
    ans += s

这假定e将始终是逗号分隔列表,并且您对不区分大小写的搜索感兴趣。 ans变量只是一个包含来自' e'字典中的价值。

修改

如果您更喜欢使用正则表达式,可以使用re模块:

import re
ans = []
for d in list_dummy:
    b = sent_tokenize(d['b'])
    e = d['e'].split(",")
    rstring = ".*" + "|".join(e) + ".*"
    r = re.compile(rstring)
    ans.append([x for x in b if r.match(x)])