python - nltk 标记化测量单位

标签 python regex nlp nltk

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

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

我正在尝试提取每个条目的测量值和单位,因此上述所有结果应该是: (1.5,克)

其他一些问题建议使用 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')]

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

谢谢!

最佳答案

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

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

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

关于python - nltk 标记化测量单位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36536227/

相关文章:

python - 包含引号的文本的句子标记化

python - 如何使用 TfIdfVectorizer 查找重要单词?

Python在索引后找到第一次出现的字符

java - Guava Splitter.onPattern(..).split() 与 String.split(..) 有何不同?

c# - 匹配精确单词的正则表达式 - 搜索字符串突出显示

php - 删除 unicode 项目符号字符

python - 如何阅读基于选区的解析树

python - 如何前向声明一个函数以避免后面定义的函数出现 `NameError` s?

python - 删除搁架中数据的最干净方法是什么?

python - 在二维数组上使用贝叶斯统计分析进行音频过滤的笨拙建议