【问题标题】:Get a position of n-gram words in a sentence获取句子中 n-gram 单词的位置
【发布时间】:2020-06-28 01:58:15
【问题描述】:

在 python 中,我想获取一个单词在句子中的位置。匹配的字符串可以是多个单词。

sentence = "Bloomberg announced today that Gordian Capital will implement the solution to help its clients pursue new fund opportunities faster."

search_str = "Bloomberg" 

预期输出:

0

要匹配的字符串可以由多个单词组成。在这种情况下,我想获得开始的位置。

search_str = "Gordian Capital" 

预期输出:

4

search_str 可以是特殊字符和数字的组合,例如$5.1 billion。我尝试了类似的方法,但它将原始句子拆分为单词,我不知道如何处理 n-gram 案例。

result = [i+1 for i,w in enumerate(sentence.split()) if w == search_str]

任何解决方案将不胜感激。谢谢

【问题讨论】:

    标签: python regex string match


    【解决方案1】:
    1. 使用 search_str 拆分句子

    结果 = sentence.split(search_str)

    1. 取结果的第一个元素并用空格分割

    结果 = 结果[0].split(' ')

    看起来已经完成了,只需要计算结果列表中的元素

    长度(结果)

    但有时,可能会出现一个空元素。

    为避免这种情况,必须过滤列表

    result = [elem for elem in filter(lambda x: x!="", result)]

    打印(长度(结果))

    所有这些你都可以写在一行中:

    result = len([elem for elem in filter(lambda x: x != "", sentence.split(search_str)[0].split(" ")) ])
    

    【讨论】:

      【解决方案2】:

      尝试枚举。

      由于您实际上只是在寻找任何搜索字符串中第一个单词的位置,我们也可以将其拆分,尝试匹配第一个单词。

      这是解决问题的一条线:

      search_str = "Gordian Capital"
      
      [k for k, v in enumerate(sentence.split()) if v.lower() == search_str.split()[0].lower()]
      

      结果:

      [4]
      

      这是一个包含多个 Gordian Capital 的句子。

      sentence = "the Bloomberg announced today that Gordian Capital will implement the solution to help Gordian Capital's clients pursue new fund opportunities faster, says Gordian Capital."
      
      [k for k, v in enumerate(sentence.split()) if v.lower() == search_str.split()[0].lower()]
      

      结果:

      [5, 13, 22]
      

      注意:由于 Python 区分大小写,因此我们将术语小写以更好地匹配。

      这部分:

      search_str.split()[0].lower()
      

      分割空白字符(默认情况下),然后我们抓取第一项并重新格式化为小写以供我们的目标匹配。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        • 2019-11-17
        • 1970-01-01
        相关资源
        最近更新 更多