php - 使用 PHP 提取上下文中单词出现的实例,并按特定条件过滤结果

标签 php regex nlp

我有一个字符串数组,它们本质上是英文段落。

我想在上下文中提取单词 Act(大写字母)的所有实例。在此处的上下文中,我希望看到 some text some text some text Act some text some text some text

左边可能有 12-15 个单词,右边有 5-8 个单词。这很像 语料库索引 Act 一词。

但是,我想排除 Act 的实例,其中:

  1. Act [0-2 words] (Cap.//即当 Act 后跟 0-2 个单词,然后是字符串(Cap.
  2. Act [0-2 个单词 (Act//即当 Act 后跟 0-2 个单词,然后是字符串 (Act
  3. [Act//即当 Act 前面有 [
  4. ……还有其他类似的案例……

您将如何使用 native PHP 或支持 NLP 的 PHP 框架来执行此操作?请准确显示(即提供代码),即使您使用 NLP 或其他框架或库也请显示您使用的函数或对象或方法。

我只能使用 PHP,但如果您有其他语言可以更好地做到这一点,请在评论中提供。请注意,我需要与 MySQL 接口(interface)以首先将字符串提取到数组中,因此该语言最好支持 MySQL 接口(interface)。

如果在 PHP 中很难做到这一点,我可以放弃处理单词并改为处理字符(例如,我可以在左侧有 40-45 个字符,在右侧有 20-25 个字符作为上下文法案这个词)。我也不介意使用正则表达式。

最佳答案

第一个正则回答左边 12-15 个词,右边 5-8 个词的标准:

^(([a-zA-Z]{1,})\s){12,15}Act\s(([a-zA-Z]{1,})\s){5,8}

你应该使用负前瞻

^((?!Act\s(([a-zA-Z]{1,})\s){0,2}Cap | (?!Act\s(([a-zA-Z]{1,})\s){0,2})Act))(([a-zA-Z]{1,})\s){12,15}Act\s(([a-zA-Z]{1,})\s){5,8}

关于php - 使用 PHP 提取上下文中单词出现的实例,并按特定条件过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56404132/

相关文章:

PHP Docblocks - 解释数组

python - 使用正则表达式抓取特定单词

java - 斯坦福 nlp : Parse Tree

php - 简单的 HTML Dom - 使用 load_file 时出现 fatal error

php - 处理 JavaScript、PHP 和 MSSQL 中的反斜杠

c++ - 正则表达式 - 计算所有数字

nlp - 从实体和词性标记文本中寻找原因/提取信息

Python 模糊搜索和替换

php - 基于购物车的 WooCommerce 登录重定向

javascript在某个字符串之后进行多行匹配