Как вывести слово, основываясь на вероятности его появления в тексте? - PullRequest
0 голосов
/ 31 октября 2018

Скажем, у меня есть 3 слова и их частота встречается в тексте.

Например:

be (1)

не (1)

есть (2)

Поскольку общая частота всех слов равна 4, я генерирую случайное число от 0 до 3 или от 1 до 4. Как бы я использовал это случайное число, чтобы программа выводила «быть» в 1/4 времени, а не в «1/4 времени» и «иметь» 1/2 времени?

1 Ответ

0 голосов
/ 31 октября 2018
std::map<unsigned int, std::string> table;

начните с этого.

unsigned int total(){
  if(table.empty())
    return 0;
  return table.back().first;
}
void add_word(std::string word, unsigned int count){
  unsigned current = total();
  table[current+count]=word;
}

сейчас table содержит карту из совокупного веса строки и все "до" ее до строки.

std::string pick( unsigned int x ){
  return table.lower_bound(x).second;
}

выберите случайное число от 1 до total() включительно. Вызовите pick(x), чтобы получить взвешенную строку вероятности.

...