仅基于大写从文本中提取命名实体的正则表达式
Regular Expression to extract Named Entities from text just based on capitalization
我想要 Python 中的正则表达式,它提取一次或多次出现的以大写字母开头的单词,除非该单词出现在第一个单词中。我知道这不是一种稳健且一致的方法,但它会解决我的问题,因为我不想使用任何统计方法(例如,在 NLTK 或 StanfordNER 中)。
示例:
extract('His name is John Wayne.')
应该return['John Wayne'].
extract('He is The President of Neverland.')
应该 return ['The President', 'Neverland'] 因为它们是大写的单词并且不会出现在句子的开头。
另一个例子:
extract('He came home. Although late, it was nice to have Patrick there.')
应该 return ['Patrick'] 因为 'He' 和 'Although' 出现在句子的开头。
它也可以删除标点符号,例如 'He was John, who came' 应该 return 'John' 而不是 'John,'.
你可以使用这个表达式来完成这个任务:
(?<!\.\s)(?!^)\b([A-Z]\w*(?:\s+[A-Z]\w*)*)
正则表达式分解:
(?<!\.\s)
- 否定回顾断言我们没有 DOT 和 space 之前
(?!^)
- 否定前瞻断言我们不在开始
\b
- 字边界
(
- 开始捕获组
[A-Z]\w*
- 匹配以大写字母开头的单词
(?:
- 启动非捕获组
\s+
- 匹配 1 个或多个白色spaces
[A-Z]\w*
- 匹配大写字母单词
)*
结束非捕获组。匹配 0 个或更多
)
- 结束捕获组
我想要 Python 中的正则表达式,它提取一次或多次出现的以大写字母开头的单词,除非该单词出现在第一个单词中。我知道这不是一种稳健且一致的方法,但它会解决我的问题,因为我不想使用任何统计方法(例如,在 NLTK 或 StanfordNER 中)。
示例:
extract('His name is John Wayne.')
应该return['John Wayne'].
extract('He is The President of Neverland.')
应该 return ['The President', 'Neverland'] 因为它们是大写的单词并且不会出现在句子的开头。
另一个例子:
extract('He came home. Although late, it was nice to have Patrick there.')
应该 return ['Patrick'] 因为 'He' 和 'Although' 出现在句子的开头。
它也可以删除标点符号,例如 'He was John, who came' 应该 return 'John' 而不是 'John,'.
你可以使用这个表达式来完成这个任务:
(?<!\.\s)(?!^)\b([A-Z]\w*(?:\s+[A-Z]\w*)*)
正则表达式分解:
(?<!\.\s)
- 否定回顾断言我们没有 DOT 和 space 之前(?!^)
- 否定前瞻断言我们不在开始\b
- 字边界(
- 开始捕获组[A-Z]\w*
- 匹配以大写字母开头的单词(?:
- 启动非捕获组\s+
- 匹配 1 个或多个白色spaces[A-Z]\w*
- 匹配大写字母单词
)*
结束非捕获组。匹配 0 个或更多
)
- 结束捕获组