Мне известны эта публикация и эта библиотека , но они не помогли мне с этими конкретными случаями ниже.Как я могу проанализировать измерения, как показано ниже:
У меня есть строки, подобные приведенным ниже;
"Square 10 x 3 x 5 mm"
"Round 23/22; 24,9 x 12,2 x 12,3"
"Square 10x2"
"Straight 10x2mm"
Я ищу пакет Python или какой-либо способ получить результаты, как показано ниже;
>>> a = amazing_parser.parse("Square 10 x 3 x 5 mm")
>>> print(a)
10 x 3 x 5 mm
Likewise;
>>> a = amazing_parser.parse("Round 23/22; 24,9x12,2")
>>> print(a)
24,9 x 12,2
Я также пытался использовать " распознавание именованных сущностей ", используя модель "ner_ontonotes_bert_mult".Но результаты были такими, как показано ниже:
>>> from deeppavlov import configs, build_model
>>> ner_model = build_model(configs.ner.ner_ontonotes_bert_mult, download=True)
>>> print(ner_model(["Round 23/22; 24,9 x 12,2 x 12,3"]))
<class 'list'>: [[['Round', '23', '/', '22', ';', '24', ',', '9', 'x', '12', ',', '2', 'x', '12', ',', '3']], [['O', 'B-CARDINAL', 'O', 'B-CARDINAL', 'O', 'B-CARDINAL', 'O', 'B-CARDINAL', 'O', 'B-CARDINAL', 'O', 'B-CARDINAL', 'O', 'B-CARDINAL', 'O', 'B-CARDINAL']]]
Я не знаю, как правильно извлечь эти измерения из этого списка.
Я также нашел это регулярное выражение:
>>>re.findall("(\d+(?:,\d+)?) x (\d+(?:,\d+)?)(?: x (\d+(?:,\d+)?))?", "Straight 10 x 2 mm")
<class 'list'>: [('10', '2', '')]
Но он оставляет пустое значение в результирующем списке, если вход содержит 2 измерения, и не работает, если между числами и символами "x" нет пробела.Я плохо разбираюсь в регулярных выражениях ...