基于特定模式从文本中提取句子

时间:2014-11-25 06:53:31

标签: php regex

我正在编写一小段代码来提取包含文本文档中特定单词的句子。

以下是判刑的条件:

句子必须包含搜索词。

句子必须以大写字母开头。

句子必须以句号结束

句子必须至少有8个单词。

经过一些研究后我发现最快的方法就是使用preg_split(),但我对regex很新,因此我遇到前两个条件的困难。最后一个可以使用if str_word_count()中的else来完成(我认为)。

示例:

  Der er en lang og bevæget forhistorie bag lov om varsling m.v. i forbindelse med afskedigelser af større omfang. Det er ikke en bureaukratisk lovtekst blandt så mange andre.

搜索字词:

bureaukratisk

它将返回第二句Det er ikke en bureaukratisk lovtekst blandt så mange andre.因为  它包含我们的搜索词,并满足所有三个条件

任何帮助都将受到高度赞赏

亲切的问候 艾哈迈尔

2 个答案:

答案 0 :(得分:1)

检查句子使用中是否存在Word

if (strpos($str,'are') !== false) {
    echo 'word is present';
}

检查单词计数

str_word_count($str);

检查第一个单词是否以大写字母开头

if (strtoupper($str[0]) == $str[0])
{
   echo "match";
}

编辑:从段落中获取句子。

$strarr = explode(".",$para)

foreach($strarr as $check)
{

//use the functions i mentioned above here...if it matches print it or concanate it.
}

答案 1 :(得分:1)

你的正则表达式字符串可能需要这些元素:

([A-Z]\w* (.* ){6,} \w+[\.\?\!])

[A-Z] - any capital letter
\w* - zero or more letters
' ' - space
(.* ){6,} - six or more strings of anything ending with a space
' ' - space
\w+[\.\?\!] - at least one letter ending with a . or ? or !

我现在看到你的问题比我想象的要复杂一点。但这是一个好的开始。 Check this site out