我使用stanford pos tagger标记推文内容。我需要提取“金门大桥”或“tiburon大道”等位置。我有一些检测位置的规则,即:
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),连词 来自pos tagger的(CC)和Possessive Endings(PE)。
示例pos标记的句子:“此/ DT翻转/ VBN加油机/ NN in / IN马林/ NN已/ VBZ创建/ VBN a / DT巨大/ JJ卡纸/ NN开/ IN wb / NN 580 / CD清除/ JJ跨/ IN / DT richmond / JJ san / NN rafael / NN bridge / NN&amp; / CC Four / CD“
任何人都可以帮我为java中的每个规则创建正则表达式吗?
答案 0 :(得分:0)
虽然可能有更好/更有效的解决方案,但这应该有效:
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)
提取任意字符组合(至少一个)后跟正斜杠和&#34; NN&#34; (例如油轮/ NN)。如果我们将它与空格(\ s)结合起来,我们可以提取任意数量的连续名词。
对于第二条规则,我们添加两个可选部分,用于提取&#34; ... / DT&#34;和&#34; ... / JJ&#34;并将其与规则一结合起来。规则三只是添加另一个可选部分,它提取&#34; ... / CD&#34;并将其与规则二结合起来。对于规则四,我们附加一个可选的&#34; ... / CD&#34;统治二。
对于第五条规则,您必须将<3>
和<4>
替换为相应的规则。否则看起来会有点复杂。中间部分提取&#34; ... / CC&#34;或&#34; ... / PE&#34;我们追加并添加一个模式以匹配规则三或规则四。