我正在用Python做两个NLP项目,都有一个类似的任务,从句子中提取数值和比较运算符,如下所示:
"... greater than $10 ... ",
"... weight not more than 200lbs ...",
"... height in 5-7 feets ...",
"... faster than 30 seconds ... "
我找到了两种不同的方法来解决这个问题:
- 使用非常复杂的正则表达式。
- 使用Named Entity Recognition(以及一些正则表达式)。
我如何从这样的句子中解析出数值呢?我假设这是NLP中的一个常见任务。
所需的输出如下所示:
输入:
“大于$10”
输出:
{'value': 10, 'unit': 'dollar', 'relation': 'gt', 'position': 3}
2条答案
按热度按时间ozxc1zmp1#
我可能会把这个作为一个分块任务来处理,并使用
nltk
的词性标记器和它的正则表达式分块器。这将允许你基于句子中单词的词性而不是单词本身来定义正则表达式。对于一个给定的句子,你可以做以下操作:首先,我会稍微修改一下你的句子,这样你就不会把词性标注者弄得太糊涂了。下面是一些你可以做的修改的例子(用非常简单的正则表达式),但是你可以尝试一下,看看是否还有其他的修改:
因此我们得到:
现在你可以从你的句子中得到词性:
我们现在可以创建一个chunker,它将根据一个(相对)简单的正则表达式对POS标记文本进行分块:
这定义了一个语法分析器,它可以对数字短语(我们称之为短语类型)进行分块。它将数字短语定义为:一个可选名词,后跟一个可选副词,后跟一个比较级形容词、一个介词、一个数字和一个可选名词。这只是对如何定义短语的一个建议,但我认为这比在单词本身上使用正则表达式要简单得多。
要获得您的短语,您可以执行以下操作:
或者只得到你的短语,你可以做:
x759pob22#
https://spacy.io/universe/project/numerizer可能适合您的用例。
从链接: