Я создаю класс Unigram Tagger. Я полагаю, что я нахожусь на заключительной стадии, хотя я теперь потерян на том, как определить вероятности тегов. До сих пор я достиг подсчета общего количества тегов, общего количества слов и, наконец, подсчета каждого тега на каждое слово. И конечно же тренировка.
Для учетных записей я получаю:
{'PRON': 2820, 'VERB': 6201, ...
Для WordCounts я получаю:
{'i': 531, 'need': 3, "n't": 213, 'be': 145, ...
Для tagperwordcounts я получаю:
{'i': {'PRON': 531}, 'need': {'VERB': 3}, "n't": {'ADV': 213}, 'be': {'VERB': 145}, 'afraid': {'ADJ': 12}, 'of': {'ADP': 502, 'ADV': 10}, ...
И формула, которую я вполне уверен, что я должен использовать, чтобы определить вероятности:
? (?│?) = («количество вхождений« ? », помеченных как« ?) / (»количество вхождений« ?)
Хотя я не уверен, как поместить это в код?
class unigram_tagging():
def __init__(self,traind=[]):
self.tagcounts={}
self.wordcounts={}
self.tagperwordcounts={}
self.train(traind=traind)
def train(self,traind):
for sentence in traind:
for token,tag in sentence:
self.tagcounts[tag]=self.tagcounts.get(tag,0)+1
self.wordcounts[token]=self.wordcounts.get(token,0)+1
current=self.tagperwordcounts.get(token,{})
current[tag]=current.get(tag,0)+1
self.tagperwordcounts[token]=current
def tag(self,traind): #Here I want to work out probability
Идея состоит в том, что этот последний метод назначит тег, который максимизирует вероятность тега.