преобразование списка слов в частоту JSON - PullRequest
1 голос
/ 08 мая 2019

Я написал код, который принимает список элементов и выводит json с уникальными элементами в качестве ключей и частотой в качестве значения.

Приведенный ниже код отлично работает, когда я проверяю его


const tokenFrequency = tokens =>{

  const setTokens=[...new Set(tokens)]
  return setTokens.reduce((obj, tok) => {
    const frequency   = tokens.reduce((count, word) =>word===tok?count+1:count, 0);

    const containsDigit = /\d+/;
    if (!containsDigit.test(tok)) {
      obj[tok.toLocaleLowerCase()] = frequency;
    }
    return obj;
  }, new Object());
}


как

const x=["hello","hi","hi","whatsup","hey"]
console.log(tokenFrequency(x))

производит вывод

{ hello: 1, hi: 2, whatsup: 1, hey: 1 }

но когда я пытаюсь использовать список слов огромного массива данных, это, похоже, дает неправильный результат.

скажем, если я добавлю слова списка с длиной списка более 14000, это даст неправильные результаты.

Пример: https://github.com/Nahdus/word2vecDataParsing/blob/master/corpous/listOfWords.txt когда этот список на этой странице (ссылка выше) функционирует, частота слова "is" получается равной 4, но фактическая частота равна 907.

почему это ведет себя так для больших данных? как это можно исправить?

1 Ответ

1 голос
/ 08 мая 2019

Сначала необходимо нормализовать свои токены, применив к ним toLowerCase() или способ различения одинаковых слов, но различающихся только заглавными буквами.

Причина:

В вашем небольшом наборе данных нет Is слов (с заглавной буквой «i»).Большой набор данных имеет вхождения Is (с заглавной буквой 'i'), который, по-видимому, имеет частоту 4, которая, в свою очередь, перезаписывает частоту is в нижнем регистре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...