Как я могу распознать измеряемые объекты из абзаца текста и разбить их на 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))

Измеряемая сущность здесь должна быть "ДВАДЦАТЬ ПЯТЬ МИЛЛИОНОВ ДОЛЛАРОВ".

Мне нужно изменить грамматику, чтобы она соответствовала этому предложению. Но сделав это, я обнаружил, что другие предложения не дают правильного определения.

Я считаю, что применяемый мной подход неверен.

Я должен делать это без таких вещей, как машинное обучение, вроде обучения классификатора.

Возможно ли такое? Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам