Я разбираю читаемый человеком научный текст, который в основном относится к области химии. Меня интересует разбивка текста на список слов, научных терминов (подробнее об этом ниже) и знаков препинания.
Так, например, я ожидаю текст "Привет, мир". разбить на 4 токена: 1) «привет»; 2) запятая; 3) «мир» и 4) период. Обратите внимание, что пробелы не требуют специализированных токенов.
Проблема связана с «научными терминами»: это названия химических формул, таких как «1-метил-4-фенилпиридиний». Любой, кто когда-либо изучал химию, знает, что эти формулы могут быть довольно длинными и могут содержать числа, тире и запятые, а иногда даже круглые скобки, но я думаю, что можно с уверенностью предположить, что эти милые выражения не могут содержать пробелов. Кроме того, я считаю, что эти выражения должны начинаться с цифры. Мне бы хотелось, чтобы каждое такое выражение выглядело как единое целое.
Сегодня я использую ручной анализ, чтобы найти «куски» текста, которые начинаются с цифры и заканчиваются либо пробелом, разрывом строки или знаком пунктуации, за которым следует либо пробел, либо разрыв строки.
Мне было интересно, есть ли разумное решение (регулярное выражение или другое), которое я могу использовать для токенизации текста в соответствии с приведенными выше спецификациями. Я работаю в Python, но это может быть не зависит от языка.
Пример ввода (очевидно, игнорируя содержимое ...):
«Здравствуйте. 1-метил-4-фенилпиридиний - это очень плохо. Однако 1-метил-4-фенил-1,2,3,6-тетрагидропиридин хуже».
Пример вывода (каждый токен в отдельной строке):
Hello
.
1-methyl-4-phenylpyridinium
is
ultra
-
bad
.
However
,
1-methyl-4-phenyl-1,2,3,6-tetrahydropyridine
is
worse
.