101
правка
Изменения
→Частеречная разметка
* ''С использованием [[Скрытые Марковские модели|скрытой марковской модели]]''. Пусть в нашей Марковской модели ''тэги'' будут '''скрытыми состояниями''', которые производят '''наблюдаемое событие''' - ''слова''. С математической точки зрения, мы хотим найти такую ''последовательность тэгов (C)'', которая будет максимизировать условную вероятность <tex>P(C|W)</tex>, где <tex>C = C_1, C_2, \dots C_T</tex> и <tex>W = W_1, W_2, \dots W_T</tex>. Воспользовавшись формулой Байеса получим, что максимизировать необходимо следующее выражение: <tex>p(C_1, C_2, \dots C_T) \cdot p(W_1, W_2, \dots W_T | C_1, C_2, \dots C_T)</tex>.
Благодаря частому использованию POS-тэгирования на практике, существует много встроенных библиотек с готовыми реализациями. Например, NLTK<ref>[https://www.nltk.org/ NLTK]</ref>, scikit-learn<ref>[https://scikit-learn.org scikit-learn]</ref>, FreelingHunPOS<ref>[httphttps://nlpcode.lsigoogle.upc.educom/archive/freelingp/nodehunpos/1 FreelingHunPOS]</ref>, TurboParserStandford POS Tagger<ref>[httphttps://www.csnlp.cmustanford.edu/~arksoftware/TurboParser/ TurboParsertagger.shtml Stanford]</ref> и другие. Примеры использования некоторых библиотек:
* NLTK:
import nltk
nltk.pos_tag(text)
'''output:''' [('Hello', 'NNP'), ('welcome', 'NN'), ('to', 'TO'), ('the', 'DT'), ('world', 'NN'), ('of', 'IN'), ('to', 'TO'), ('learn', 'VB'), ('Categorizing', 'NNP'), ('and', 'CC'), ('POS', 'NNP'), ('Tagging', 'NNP'), ('with', 'IN'), ('NLTK', 'NNP'), ('and', 'CC'), ('Python', 'NNP')]
* HunPOS:
from os.path import expanduser
home = expanduser("~")
from nltk.tag.hunpos import HunposTagger
_path_to_bin = home + '/hunpos-1.0-linux/hunpos-tag'
_path_to_model = home + '/hunpos-1.0-linux/en_wsj.model'
ht = HunposTagger(path_to_model=_path_to_model, path_to_bin=_path_to_bin)
text = "The quick brown fox jumps over the lazy dog"
ht.tag(text.split())
[('The', 'DT'), ('quick', 'JJ'), ('brown', 'JJ'), ('fox', 'NN'), ('jumps', 'NNS'), ('over', 'IN'), ('the', 'DT'), ('lazy', 'JJ'), ('dog', 'NN')]
* Stanford POS tagger
from os.path import expanduser
home = expanduser("~")
from nltk.tag.stanford import POSTagger
_path_to_model = home + '/stanford-postagger/models/english-bidirectional-distsim.tagger'
_path_to_jar = home + '/stanford-postagger/stanford-postagger.jar'
st = POSTagger(path_to_model=_path_to_model, path_to_jar=_path_to_jar)
text = "The quick brown fox jumps over the lazy dog"
st.tag(text.split())
[(u'The', u'DT'), (u'quick', u'JJ'), (u'brown', u'JJ'), (u'fox', u'NN'), (u'jumps', u'VBZ'), (u'over', u'IN'), (u'the', u'DT'), (u'lazy', u'JJ'), (u'dog', u'NN')]
== Библиотеки для NLP ==