【问题标题】:Python - Extracting sentences from paragraphsPython - 从段落中提取句子
【发布时间】:2017-10-03 04:21:25
【问题描述】:

我是 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 仅将字符串作为输入。如何进行?

【问题讨论】:

    标签: python nltk


    【解决方案1】:

    好吧,我似乎无法让 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)])
    

    【讨论】:

    • 代码不起作用。如果我打印(ans),它会给我:['房子很棒。','我喜欢它。','建筑物是白色的。', “我喜欢它。”、“她看起来很漂亮。”、“她在我的大学里”]。只给我完整的句子。
    • 嗨 Deepti,我想我最初发帖时犯了一个错误。修改后的代码能解决问题吗?
    • 是的,现在它只给我那些句子。但是,我怎样才能拆分句子,而不是相应地为字典中的那些值获取所需的提取句子。因为我需要将其导出到 excel 中并进行一些手动情绪标记。例如。我需要为第一行列表中的第一个元素提取一个或多个句子。第 2 行中的第 2 个元素提取的句子。使用上面的代码,如果超过一个句子,位置就会改变。
    • 如果我只给出下面的代码 ans = [] for d in list_dummy: tmp = sent_tokenize(d['b']) ans += s print(tmp) contd..
    • contd... 输出是:['房子很棒。','我喜欢它。'] ['建筑物是白色的。','我喜欢它。'] ['她看起来很漂亮。', '她在我的大学里'] 'tmp' 将只有最后一行。我怎样才能结合所有,每个对应于自己的元素
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2012-01-17
    • 1970-01-01
    • 2022-01-03
    • 2019-08-14
    • 2011-07-15
    • 2022-12-04
    相关资源
    最近更新 更多