Выбор слова на основе весов матрицы перехода в python - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь выбрать вероятное следующее слово на основе текущего слова, используя в качестве весов предыдущую пару слов. У меня проблемы с реализацией np.random.choice() в действительном выборе следующего слова.

import pandas as pd
import numpy as np

texty = "won't you celebrate with me what i have shaped into a kind of life i had no model born in babylon both nonwhite and woman what did i see to be except myself i made it up here on this bridge between starshine and clay my one hand holding tight my other hand come celebrate with me that everyday
something has tried to kill me and has failed." 

# https://www.poetryfoundation.org/poems/50974/wont-you-celebrate-with-me

words = texty.split()

# Creating the text-based transition matrix

x = pd.crosstab(pd.Series(words[1:],name='next'),
            pd.Series(words[:-1],name='word'),normalize=1)

print(x)

# Selecting the next word based on the current word.
# https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.choice.html

current = "and"

# this part isn't working--->
next = np.random.choice(current,1,current) # was "y"

Я не знаю, как отсюда ссылаться на матрицу перехода. Я хотел бы, чтобы этот выбор основывался на вероятностях предыдущих случаев. Например, вероятность «глин» следовать «а» составляет 33%.

1 Ответ

2 голосов
/ 16 февраля 2020

x является Pandas DataFrame .

Вы можете получить доступ к любому из столбцов этого DataFrame, как если бы имена столбцов были ключами в словаре.

> print(x['won\'t'])
next
a            0.0
and          0.0
babylon      0.0
...
with         0.0
woman        0.0
you          1.0
Name: won't, dtype: float64

Столбец возвращается как Pandas Series . Если вы выберете столбец в DataFrame (ваша матрица перехода x), index выбранной вами серии будет доступными словами из текста, а values будет их вероятностями. Вы можете предоставить каждый из них для np.random.choice, чтобы получить следующее слово с вероятностями, взвешенными из вашей матрицы перехода.

> current_word = 'won\'t'
> current_column = x[current_word]
> next_word = np.random.choice(current_column.index,
                 p=current_column.values)
> print(next_word)
you
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...