用于提取位置的 pos 标记文本的正则表达式

regex for pos tagged text for extract location

我正在使用 stanford pos tagger 来标记推文内容。我需要提取 "the golden gate bridge" 或 "tiburon blvd" 等位置。我有一些检测位置的规则,即:

1.<NN>+ 
2.<DT>?<JJ>?<1> ----> <1>:it means the rule number 1
3.<CD>?<2>
4.<2> <CD>?
5.(3|4) <CC | PE> (3|4)

“+”号表示存在至少一个或 更多次,“?”符号表示存在标记零或 有一次,“|”标志表示其中之一的存在 两个标签。 我们有名词 (NN)、限定词 (DT)、形容词 (JJ)、基数 (CD)、连词 (CC),以及来自 pos 标记器的所有格结尾 (PE)。

示例 pos 标记句子:"this/DT overturned/VBN tanker/NN in/IN marin/NN has/VBZ created/VBN a/DT huge/JJ jam/NN on/IN wb/NN 580/CD clear/JJ across/IN the/DT richmond/JJ san/NN rafael/NN bridge/NN &/CC Four/CD"

谁能帮我为 java 中的每条规则创建正则表达式?

虽然可能有更好/更有效的解决方案,但这应该可行:

1. (\w+/NN)(\s(\w+/NN))*
2. (\w+/DT\s)?(\w+/JJ\s)?(\w+/NN)(\s(\w+/NN))*
3. (\w+/CD\s)?(\w+/DT\s)?(\w+/JJ\s)?(\w+/NN)(\s(\w+/NN))*
4. (\w+/DT\s)?(\w+/JJ\s)?(\w+/NN)(\s(\w+/NN))*(\s\w+/CD)?
5. ((<3>)|(<4>))\s((\w+/CC)|(\w+/PE))\s((<3>)|(<4>))

一点解释: (\w+/NN) 提取字符的任意组合(至少一个),后跟正斜杠和 "NN"(例如 tanker/NN)。如果我们将它与空格 (\s) 组合,我们可以提取任意数量的连续名词。

对于第二条规则,我们添加了两个可选部分,提取“.../DT”和“.../JJ”并将其与规则一结合。规则三只是添加了另一个可选部分,该部分提取“.../CD”并将其与规则二组合。对于规则四,我们将可选的“.../CD”附加到规则二。

对于第五条规则,您必须将 <3><4> 替换为相应的规则。否则看起来会有点复杂。中间部分提取“.../CC”或“.../PE”,我们附加和预先添加一个模式以匹配规则三或规则四。