【问题标题】:Python NLTK and RegexpPython NLTK 和正则表达式
【发布时间】:2015-06-02 10:04:34
【问题描述】:

我正在尝试标记文本,使用 POS 标记器,然后使用自定义的“模式”(见下文)对其输出进行分块。这些是我的安装导入存储库,然后是 post 标记的输出。

from nltk.chunk import *
from nltk.chunk.util import *
from nltk.chunk.regexp import *

pos =  [(u'max', 'NN'), (u'workpiece', 'NN'), (u'diameter', 'NN'), (u'250', 'CD'), (u'mm', 'NN'), (u'threading', 'VBG'), (u'length', 'NN'), (u'800', 'CD'), (u'mm', 'NN'), (u'max', 'NN'), (u'module', 'NN'), (u'5', 'CD'), (u'total', 'NN'), (u'power', 'NN'), (u'requirement', 'NN'), (u'5', 'CD'), (u'kW', 'NNP')]

我正在尝试通过以下方式调整我创建的 POS chunker:

pattern = r""" 
          FEAT: {<NN><NN>+}
                {<VBG><NN>}
           VAL: {<CD><NN|NNP>}
           """

我目前的输出:

(S
  (ATTR max/NN workpiece/NN diameter/NN)
  (VAL 250/CD mm/NN)
  (ATTR threading/VBG length/NN)
  800/CD
  (ATTR mm/NN max/NN module/NN)
  5/CD
  (ATTR total/NN power/NN requirement/NN)
  (VAL 5/CD kW/NNP)

我需要的输出:

(S
  (ATTR max/NN workpiece/NN diameter/NN)
  (VAL 250/CD mm/NN)
  (ATTR threading/VBG length/NN)
  (VAL 800/CD mm/NN)
  (ATTR max/NN module/NN)
  5/CD
  (ATTR total/NN power/NN requirement/NN)
  (VAL 5/CD kW/NNP)

如何自定义此卡盘模式,以使 800(CD) mm (NN) 也被视为 VAL。我认为我的 VAL 代码表示:找到一个标记为 CD 的标记,然后是标记标记 NN。我应该采取什么方法来实现这一目标?

谢谢

【问题讨论】:

    标签: python regex nltk chunking


    【解决方案1】:

    不确定我是否了解您的具体要求,如果您将示例格式设置得更好一些,并解释您对模式变量的实际操作,这将有所帮助。 但我的猜测是;通过使 NN|NNP 部分可选? 像这样?:

    import nltk
    
    pos = [('max', 'NN'), ('workpiece', 'NN'), ('diameter', 'NN'), ('250', 'CD'), ('mm', 'NN'), ('threading', 'VBG'), ('length', 'NN'), ('5', 'CD'), ('800', 'CD'), ('mm', 'NN'), ('max', 'NN'), ('module', 'NN')]
    
    pattern = r"""
            FEAT: {<NN><NN>+}
            {<VBG><NN>}
            VAL: {<CD><NN|NNP>?}
            """
    
    parser = nltk.RegexpParser(pattern)
    print(parser.parse(pos))
    

    输出:

    (S
      (FEAT max/NN workpiece/NN diameter/NN)
      (VAL 250/CD mm/NN)
      (FEAT threading/VBG length/NN)
      (VAL 5/CD)
      (VAL 800/CD)
      (FEAT mm/NN max/NN module/NN))
    

    【讨论】:

    • 试着改变你的语法/分块规则的顺序(这样 VAL 就排在第一位)。用于此的 nltk 解析器非常触发快乐,并且不允许多个解析树,因此它将采用第一个匹配项。
    猜你喜欢
    • 2013-03-24
    • 2016-03-03
    • 2011-12-02
    • 1970-01-01
    • 2016-07-21
    • 2019-02-15
    • 2013-06-24
    相关资源
    最近更新 更多