Я опаздываю на эту вечеринку, но я играл с концепциями tc-idf (я хочу подчеркнуть слово «концепция», потому что я не следовал никаким книгам для реальных вычислений; так что они могут быть несколько непонятными, и определенно это легче сделать с помощью таких пакетов, как {tm: Text Mining Package}
, как уже упоминалось), и я думаю, что то, что я получил, может быть связано с этим вопросом, или, в любом случае, это может быть хорошим местом для публикации.
SET-UP: У меня есть корпус из 5
длинных пунктов , взятых из печатных средств массовой информации, text 1
через 5
такие , как The New York Times . Предположительно, это очень маленькое «тело», крошечная библиотека, так сказать, но записи в этой «цифровой» библиотеке не случайны: первая и пятая записи имеют отношение к футболу (или «футбол» для «социального клуба») (?) где-то здесь), а точнее о самой великой команде сегодня. Так, например, text 1
начинается как ...
«За последние девять лет Месси вывел« Барселону »на национальные и международные титулы, побив индивидуальные рекорды способами, которые кажутся потусторонними ...»
Очень хорошо! С другой стороны, вы определенно хотите пропустить содержимое трех записей между ними. Вот пример ( text 2
):
«В течение нескольких часов по всему Техасу г-н Рубио предположил, что г-н Трамп мочился в его штаны и использовал нелегальных иммигрантов, чтобы прослушивать его непрерывные сообщения в Твиттере ...»
Так что же делать, чтобы любой ценой избежать «серфинга» от text 1
до text 2
, продолжая радоваться литературе о всемогущем «Барселоне» text 5
?
TC-IDF: Я выделил слова в каждом text
в длинные векторы. Затем посчитали частоту каждого слова, создав пять векторов (по одному для каждого text
), в которых text
были подсчитаны только слова, встречающиеся в соответствующем - все остальные слова, принадлежащие другим text
s, были оценены в ноль. В первом фрагменте text 1
, например, его вектор будет иметь значение 1 для слова «Месси», а для «Трампа» - 0. Это была часть tc .
Часть idf также рассчитывалась отдельно для каждого text
, и в результате было получено 5 «векторов» (я думаю, что я рассматривал их как фреймы данных), содержащих логарифмические преобразования количества документов (к сожалению, от нуля до пяти, учитывая нашу небольшую библиотеку ) содержащее данное слово как в:
log(No. documents1+No. docs containing a word)text
01text
tc×idftext
СРАВНЕНИЯ: Теперь это был просто вопрос выполнения точечных произведений среди этих «векторов важности слова».
Как и ожидалось, скалярное произведение text 1
с text 5
было 13.42645
, а text 1
v text2
было только 2.511799
.
Неуклюжий код R (нечего имитировать) находится здесь .
Опять же, это очень элементарная симуляция, но я думаю, что это очень наглядно.