Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用NLP从文本中提取关联值_Python_Nlp_Nltk - Fatal编程技术网

Python 使用NLP从文本中提取关联值

Python 使用NLP从文本中提取关联值,python,nlp,nltk,Python,Nlp,Nltk,我想提取与度量单位相关联的基数(CD)值,并将其存储在字典中。例如,如果文本包含“20 kgs”之类的标记,则应将其提取并保存在字典中 例如: 对于输入文本,“10英寸煎锅具有极好的导热性和分布性”,输出字典应类似于,{“尺寸”:“10英寸”} 对于输入文本,“此桶可容纳5升水”。输出应类似于,{“体积”:“5升”} 上述行将给出输出: [('This', 'DT'), ('bucket', 'NN'), ('holds', 'VBZ'), ('5', 'CD'), ('litres', 'N

我想提取与度量单位相关联的基数(CD)值,并将其存储在字典中。例如,如果文本包含“20 kgs”之类的标记,则应将其提取并保存在字典中

例如:

  • 对于输入文本,“10英寸煎锅具有极好的导热性和分布性”,输出字典应类似于,
    {“尺寸”:“10英寸”}

  • 对于输入文本,“此桶可容纳5升水”。输出应类似于,
    {“体积”:“5升”}

  • 上述行将给出输出:

    [('This', 'DT'), ('bucket', 'NN'), ('holds', 'VBZ'), ('5', 'CD'), ('litres', 'NNS'), ('of', 'IN'), ('water', 'NN'), ('.', '.')]
    

    是否有从文本中提取CD和UOM值的方法?

    不确定该过程需要多大的灵活性。您可以使用nltk.RegexParser,并想出一些好的模式:

    import nltk
    
    sentence = 'This bucket holds 5 litres of water.'
    
    parser = nltk.RegexpParser(
        """
        INDICATOR: {<CD><NNS>}
        """)
    
    print parser.parse(nltk.pos_tag(nltk.word_tokenize(sentence)))
    

    您还可以创建一个语料库并训练一个chunker。

    Hm,不确定它是否有用——但我是用Javascript编写的。 在这里:

    它可能有点没有文档化,但是现在他们正在将它移植到一个2.0分支上

    移植到python应该很容易


    还有:你查过蟒蛇NLTK吗

    您是否尝试使用
    斯坦福nlp
    ?任何POS标记器都应该非常准确地标记CD,并且从单位到标签集的固定映射可能会捕获大多数实例。我倾向于回避手工构建固定词典,但这似乎是一个应用程序,您可以通过一个简单的列表获得相当好的覆盖率。例如,给出您的示例“lit(er | re)(s?)”->“volume”、“inch(es)”->“dimension”(或者“length”)。您必须处理一些更复杂的情况,如“平方米”或“in^3”,并且会有一些不明确的引用(例如,“knots”既是长度又是速度)。但这些应该是罕见的。@Kasra:我应该在斯坦福nlp中引用任何具体的解决方案吗?@Dork据我所知,斯坦福nlp用于特殊标记,例如提取特殊名称或,我不确定它是否能帮助您,但我建议搜索与您的问题相关的内容!:是否有一种内置方法可以在词性标记后将文本与标记分开?Javascript库很好,我将尝试更多的方法。关于nltk这本书,我尝试的示例代码是这本书的一部分。
    import nltk
    
    sentence = 'This bucket holds 5 litres of water.'
    
    parser = nltk.RegexpParser(
        """
        INDICATOR: {<CD><NNS>}
        """)
    
    print parser.parse(nltk.pos_tag(nltk.word_tokenize(sentence)))
    
    (S
      This/DT
      bucket/NN
      holds/VBZ
      (INDICATOR 5/CD litres/NNS)
      of/IN
      water/NN
      ./.)