【问题标题】:nltk tokenize measurement unitsnltk 标记测量单位
【发布时间】:2016-07-31 21:06:06
【问题描述】:

我正在尝试从杂乱的数据集中提取测量值。 一些基本的示例条目是:

  • 1.5 克扑热息痛
  • 1.5g 扑热息痛
  • 1.5 克。扑热息痛

我正在尝试提取每个条目的度量和单位,因此以上所有内容的结果应该是: (1.5, g)

其他一些问题建议将 NLTK 用于此类任务,但我在执行以下操作时遇到了麻烦:

import nltk

s1 = "1.5g of paracetamol"
s2 = "1.5  gram of paracetamol"

words_s1 = nltk.word_tokenize(s1)
words_s2 = nltk.word_tokenize(s2)

nltk.pos_tag(words_s1)
nltk.pos_tag(words_s2)

返回

[('1.5g', 'CD'), ('of', 'IN'), ('paracetamol', 'NN')]
[('1.5', 'CD'), ('gram', 'NN'), ('of', 'IN'), ('paracetamol', 'NN')]

问题在于,在第一个示例中,单位“g”被保留为 CD 的一部分。我怎样才能得到以下结果?

[('1.5', 'CD'), ('g', 'NN'), ('of', 'IN'), ('paracetamol', 'NN')]

在真实数据集上,单位更加多样化(毫克、毫克、公斤、公斤......)

谢谢!

【问题讨论】:

    标签: python regex nlp nltk


    【解决方案1】:

    您必须使用nltk.regexp_tokenize 自己标记句子,例如:

    words_s1 = nltk.regexp_tokenize(s1, r'(?u)\d+(?:\.\d+)?|\w+')
    

    显然,它需要改进以处理更复杂的情况。

    【讨论】:

    • 这确实工作得很好,我只需要添加对逗号的支持,因为在某些国家/地区使用逗号来表示十进制值。谢谢!!
    猜你喜欢
    • 2015-05-22
    • 2016-07-02
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2015-03-25
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多