【问题标题】:Is there a way to chunk 2 or more repititions of a tag in a tagged sentence using nltk?有没有办法使用 nltk 在标记的句子中分块 2 个或更多重复的标记?
【发布时间】:2011-10-03 08:00:27
【问题描述】:

我正在尝试使用 python 中的 nltk 模块将任何有两到五个名词顺序出现的实例分块。

这是我正在使用的代码:

parse_pattern  = "Keyword: {< N>{2,5}}"
keyword_parser = nltk.RegexpParser(parse_pattern)
result = keyword_parser.parse(sentence)

我觉得这个位应该可以解决问题:Keyword: {&lt; N&gt;{2,5}}

我什至在《Natural Language Processing with Python》一书中找到了一个完全类似地使用上述位的示例:NOUNS: {&lt; N.*&gt;{4,}},作者解释说该位代码应该分块 4 个或更多名词。

但是,当我运行上述代码时出现错误:

ValueError: Illegal chunk pattern: {< N>{2,5}}

注意:我也尝试使用{&lt; N.*&gt;{2,5}} 进行上述操作(使用点星完全是因为上述书的作者这样做了),但没有运气。

任何关于如何分块两个或更多重复标记的帮助将不胜感激。

【问题讨论】:

    标签: python nltk chunking


    【解决方案1】:

    ValueError 可能是由左尖括号和 N 之间的空格触发的。

    parse_pattern = "Keyword: {&lt;N&gt;{2,5}}" 而不是
    parse_pattern = "Keyword: {&lt; N&gt;{2,5}}"

    另外,不要担心使用带有额外点星的语法,因为这仅在您尝试匹配所有 start 与此处为 N 的标签时才有必要。

    如果全部失败,您可以尝试使用不需要 {min, max} 语法的出现范围的替代表达式。 parse_pattern = "Keyword: {&lt;N&gt;&lt;N&gt;&lt;N&gt;?&lt;N&gt;?&lt;N&gt;?}"

    如果这甚至失败了,也许只尝试parse_pattern = "Keyword: {&lt;N&gt;}",希望这能让某些东西工作,或者可能有助于查明您的设置可能还有什么问题。

    【讨论】:

      【解决方案2】:

      nltk 用以下标签标记名词:

      • &lt;NN&gt; 表示单数名词
      • &lt;NNP&gt; 用于单数专有名词
      • &lt;NNS&gt; 复数名词
      • &lt;NNPS&gt; 复数专有名词

      因此,如果您想在两到五次之间捕获其中任何一个,您将需要正则表达式:

      <NN.*>{2,5}
      

      以你的例子,那将是:

      parse_pattern  = "Keyword: {<NN.*>{2,5}}"
      keyword_parser = nltk.RegexpParser(parse_pattern)
      result         = keyword_parser.parse(sentence)
      

      注意sentence必须加标签,例如

      sentence = [("dog", "NN"), ("David", "NNP"), ("cats", "NNS")]
      

      【讨论】:

        【解决方案3】:

        查找regex.py 包的代码,tag_pattern2re_pattern() 的方法,该方法将tag_pattern 转换为正确的正则表达式。而常量参数 CHUNK_TAG_PATTERN 是不可变的,它以某些特殊字符开头,以特殊字符结尾,例如 '('、' '、''、'>'。所以标签模式CHUNK:{&lt;V.*&gt;&lt;TO&gt;&lt;V.*&gt;}是正确的,但是标签模式CHUNK:{&lt;V&gt;.*&lt;TO&gt;&lt;V.*&gt;{1,}}是不正确的

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-14
          • 1970-01-01
          • 2019-07-09
          • 2019-08-27
          • 2016-04-16
          • 1970-01-01
          • 2013-10-27
          • 1970-01-01
          相关资源
          最近更新 更多