【问题标题】:Find beginning of sentence in String在字符串中查找句子的开头
【发布时间】:2010-09-16 12:43:27
【问题描述】:

我想在带有标题和简短描述的网站中显示搜索查询的结果。简短描述应该是包含搜索词的页面的一小部分。我想做的是: 1 在页面中去除标签 2 找到seachterm的第一个位置 3 从那个位置,回去找到那个句子的开头(如果有的话)。 4 从第 3 步中找到的位置开始并显示即从那里开始的 200 个字符

第 3 步我需要一些帮助。我想我需要一个正则表达式来找到第一个大写字母或点...

【问题讨论】:

    标签: php regex


    【解决方案1】:

    即使这样最终也会失败。给定句子“我们去了史密斯博士的办公室”,如果您的搜索词是“办公室”,那么您使用的几乎任何标准都会将“史密斯办公室”作为您的句子。

    【讨论】:

    • 我发布了对策略的细微改动...你能看到其中的任何错误吗?
    【解决方案2】:

    我会这样做,我会解析页面...

    1. 跳过所有以'

    2. 当您遇到“.”时或 [A-Z],开始将其放入缓冲区,直到找到另一个“。”

    3. 如果缓冲的字符串有搜索关键字,那就是你的字符串!别的。在“。”处开始缓冲你遇到过并重复。

    编辑:正如 James Curran 指出的那样,这种策略在某些情况下会失败......所以解决方案如下:

    你可以做的是从页面开始(标签之后)开始X个字符

    然后搜索您的关键字,缓冲前两个单词。当你找到它时, 做这样的事情:{X} ... {prev-2} {next-2}

    例子:这个星球有——或者更确切地说有——一个问题,那就是:大多数生活在它上面的人在相当长的时间里都不快乐。针对这个问题提出了许多解决方案,但其中大多数主要关注绿色小纸片的运动,这很奇怪,因为总的来说不是绿色小纸片不开心。

    搜索关键字:“建议”

    结果:这个星球有 - 或者说有 - 一个问题......许多解决方案 建议 这个问题......

    【讨论】:

      【解决方案3】:

      对于第 3 步:如果您反转结束您想要向后搜索的子字符串,则获取第一个 '.' 的位置。并从搜索字符串的位置子跟踪该值。

      $offset = stripos( strrev(substr($string, $searchlocation)), '.');
      $startloc = $searchlocation - $offset;
      $finalstring = substr($string, $startloc, 200);
      

      这可能会偏离 1,但我认为它会完成工作。似乎应该有更短的方法。

      【讨论】:

      • James Curran 的回答也适用于此,这对于 Smith 博士的办公室来说仍然会失败。
      【解决方案4】:

      我认为与其尝试查找句子,不如考虑我在单词中需要的搜索词周围的上下文量。然后倒退这个单词数量的一部分(或回到开头)并转发剩余的单词数量以选择上下文的其余部分。这样,您只需在空格上拆分整个语料库,找到第一次出现的术语(可能使用模糊匹配来查找子术语并考虑标点符号),然后应用上述算法。如果第一个未选择的术语没有以标点符号等结尾,您甚至可以创造性地引入省略号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        • 2018-03-25
        • 1970-01-01
        • 2022-08-11
        • 1970-01-01
        相关资源
        最近更新 更多