Python 如何将标题格句子与介词匹配?

Python 如何将标题格句子与介词匹配?,python,regex,python-3.x,Python,Regex,Python 3.x,我想使用正则表达式从文档中提取标题格句子。 我希望我的正则表达式在介词都大写和不大写时与句子匹配 例如,我希望它匹配: 战争的艺术 战争的艺术 我试着在Reddit评论上使用几个正则表达式,但我总是找不到正确的句子,因为我发现了很多误报 我在Python中尝试了这个正则表达式: 导入正则表达式 pattern=regex.compile(r”\b(?我认为用regex匹配它是不可行的 您可以使用一个名为NLTK的包,该包从这些标记化的单词中获取并返回一个元组列表,您可以在其中运行自定义业务逻辑

我想使用正则表达式从文档中提取标题格句子。 我希望我的正则表达式在介词都大写和不大写时与句子匹配

例如,我希望它匹配:

战争的艺术

战争的艺术

我试着在Reddit评论上使用几个正则表达式,但我总是找不到正确的句子,因为我发现了很多误报

我在Python中尝试了这个正则表达式:

导入正则表达式

pattern=regex.compile(r”\b(?我认为用regex匹配它是不可行的

您可以使用一个名为NLTK的包,该包从这些标记化的单词中获取并返回一个元组列表,您可以在其中运行自定义业务逻辑

import nltk

str = r"Honestly 'The Art of War' should be required reading in schools (outside of China), it has so much wisdom packed into it that is so sorely lacking in our current education system."

tagged_text = nltk.word_tokenize(str)

pos_tags = nltk.pos_tag(tagged_text)

print (pos_tags)
输出:

[
    ('Honestly', 'RB'), 
    ("'The", 'POS'), 
    ('Art', 'NNP'), 
    ('of', 'IN'), 
    ('War', 'NNP'), 
    ("'", 'POS'), 
    ('should', 'MD'), 
    ('be', 'VB'), 
    ('required', 'VBN'), 
    ('reading', 'NN'),
    ('in', 'IN'),
    ('schools', 'NNS'), 
    ('(', '('), 
    ('outside', 'IN'), 
    ('of', 'IN'), 
    ('China', 'NNP'), 
    (')', ')'), 
    (',', ','), 
    ('it', 'PRP'), 
    ('has', 'VBZ'), 
    ('so', 'RB'), 
    ('much', 'JJ'), 
    ('wisdom', 'NN'), 
    ('packed', 'VBD'), 
    ('into', 'IN'), 
    ('it', 'PRP'), 
    ('that', 'WDT'), 
    ('is', 'VBZ'), 
    ('so', 'RB'), 
    ('sorely', 'RB'), 
    ('lacking', 'VBG'), 
    ('in', 'IN'), 
    ('our', 'PRP$'), 
    ('current', 'JJ'), 
    ('education', 'NN'), 
    ('system', 'NN'), 
    ('.', '.')
]
这里,
“IN”的意思是介词。

你可以用

r'\b(?!^)[A-Z]\w*(?:\s+(?:a(?:nd?)?|the|to|[io]n|from|with|of|for|[A-Z]\w*))+\b'

详细信息

  • \b
    -单词边界
  • (?!^)
    -负前瞻:此处没有字符串位置的开始
  • [A-Z]
    -大写字母
  • \w*
    -0+字母、数字或
    \uu
    s
  • (?:\s+(?:a(?:nd?)| to |[io]n | from | with | of | for |[a-Z]\w*)+
    -非捕获组内模式的零次或多次重复:
    • \s+
      -1+空格
    • (?:a(?:nd?)| to |[io]n | from | with | of | for |[a-Z]\w*)
      -任何
      • a(?:nd?)
        -
        a
        a
      • |到
        -或
      • [io]n
        -
      • | from | with | of | for
        -或
        from
        with
        of
        for
      • [A-Z]\w*
        -一个大写字母和0+个字母、数字或
        \uu
        s
  • \b
    -单词边界

尝试
r'\b(?)[A-Z]\w*(?:\s+(?:A(?:nd?)| the | to |[io]n | from | with | of | for |[A-Z]\w*)+\b'
非常感谢@WiktorStribiżew,很有效!!如果你有时间,我希望你能解释一下你在那里做了什么,否则,谢谢!让我把答案贴出来,几分钟就好了