Я занимаюсь анализом текста с помощью Python3-NLTK. На этапе предварительной обработки я хотел реализовать разбиение на фрагменты имен-фраз, для чего требуется маркировка POS и выбор в соответствии с регулярное выражение (грамматика). Мои результаты были неудовлетворительными, например, у меня была фраза the president of
, потому что pos_tag идентифицировал ее как DT,NN,NNP
(как, черт возьми, of
может быть именем собственным!)
поэтому я углубился в NLTK pos_tag и обнаружил такой своеобразный результат:
С
import nltk
nltk.help.upenn_tagset()
вы получите полный список доступных тегов в NLTK pos_tag. Это один из них:
CD: цифра, кардинальное число: середина 1890-х девять тридцать сорок два...
Как уже говорилось, слово mid-1980 означает компакт-диск. теперь это то, что у меня есть:
from nltk import pos_tag
t1 = 'it happened in the mid-1890s'
pos_tag(t1.split())[-1] # gives:('mid-1890s', 'NNS')
t2 = 'it happened in the mid-1890'
pos_tag(t2.split())[-1] # gives:('mid-1890', 'NN')
t3 = 'mid-1890'
pos_tag(t3.split())[-1] # gives:('mid-1890', 'NN')
t4 = 'mid-1890s'
pos_tag(t4.split())[-1] # gives:('mid-1890s', 'NNS')
Разве это не странная ситуация?!
Есть ли какой-либо (возможно, контролируемый) метод улучшения POS-тегов? Я работаю над более чем 11 000 документов (до 500 слов в каждом документе).