Вы можете сосчитать все биграммы и подсчитать указанные c биграммы, которые вы ищете. Вероятность того, что биграмма встречается P (биграмма), равна их частному. Условная вероятность слова [1] дать слово [0] P (w [1] | w [0]) является частным от количества вхождений биграммы по счету w [0]. Например, глядя на биграмму ('some', 'text')
:
s = 'this is some text about some text but not some other stuff'.split()
bigrams = [(s1, s2) for s1, s2 in zip(s, s[1:])]
# [('this', 'is'),
# ('is', 'some'),
# ('some', 'text'),
# ('text', 'about'),
# ...
number_of_bigrams = len(bigrams)
# 11
# how many times 'some' occurs
some_count = s.count('some')
# 3
# how many times bigram occurs
bg_count = bigrams.count(('some', 'text'))
# 2
# probabily of 'text' given 'some' P(bigram | some)
# i.e. you found `some`, what's the probability that its' makes the bigram:
bg_count/some_count
# 0.666
# probabilty of bigram in text P(some text)
# i.e. pick a bigram at random, what's the probability it's your bigram:
bg_count/number_of_bigrams
# 0.181818