Как я могу распознать измеряемые объекты из абзаца текста и разбить их на NLTL, просто используя грамматику regEx с POS и / или CFG
Из корпуса я уже сделал POS-теги к словам. Теперь мне нужно идентифицировать измеряемые объекты, такие как 30000 тонн, 500 рупий, двадцать пять галлонов и т. Д. Я прошел через парсер NLTL regEX и написал такой код:
grammer = r""" MEASURED_ENTITY: {<CD>+<JJ>*<NN|NNPS|NNS><NNS|NNPS>?}
{<CD><JJ>}
{<CD><CD>+}
"""
cp = nltk.RegexpParser(grammer)
corpra_2_sen_1 = [('It', 'PRP'), ('is', 'VBZ'), ('of', 'IN'), ('twenty-five', 'JJ'), ('million', 'CD'), ('dollars', 'NNS')]
result = cp.parse(corpra_2_sen_1)
Но он дает такой вывод:
(S
It/PRP
is/VBZ
of/IN
twenty-five/JJ
(MEASURED_ENTITY million/CD dollars/NNS))
Измеряемая сущность здесь должна быть "ДВАДЦАТЬ ПЯТЬ МИЛЛИОНОВ ДОЛЛАРОВ".
Мне нужно изменить грамматику, чтобы она соответствовала этому предложению. Но сделав это, я обнаружил, что другие предложения не дают правильного определения.
Я считаю, что применяемый мной подход неверен.
Я должен делать это без таких вещей, как машинное обучение, вроде обучения классификатора.
Возможно ли такое? Любая помощь будет оценена.