Eu tenho um conjunto de dados que representa 1000 documentos e todas as palavras que aparecem nele. Portanto, as linhas representam os documentos e as colunas representam as palavras. Assim, por exemplo, o valor na célula representa o horário em que a palavra ocorre no documento . Agora, tenho que encontrar 'pesos' das palavras, usando o método tf / idf, mas na verdade não sei como fazer isso. Alguém por favor pode me ajudar?
12
Respostas:
A Wikipedia tem um bom artigo sobre o assunto, completo com fórmulas. Os valores em sua matriz são os termos frequências. Você só precisa encontrar o idf:
(log((total documents)/(number of docs with the term))
e múltiplos os 2 valores.Em R, você pode fazer o seguinte:
Aqui estão os conjuntos de dados:
Você também pode olhar para o idf de cada termo:
fonte
log((number of docs)/(number of docs containing the term))
. Você também pode filtrar os termos não frequentes.há o pacote tm (mineração de texto) http://cran.r-project.org/web/packages/tm/index.html que deve fazer exatamente o que você precisa:
R é uma linguagem funcional, portanto, a leitura do código pode ser complicada (por exemplo, x em termos)
fonte
Seu código tem um erro: colSums calcula o número de ocorrências no corpus, não o número de textos com a palavra.
Uma versão que computa seria:
fonte
Há um novo pacote R que pode fazer isso: textir: Regressão inversa para análise de texto
O comando relevante é
tfidf
o exemplo do manual:fonte
Estou atrasado para esta festa, mas estava brincando com os conceitos de tc-idf (quero enfatizar a palavra 'conceito' porque não segui nenhum livro para os cálculos reais; portanto, eles podem estar um pouco errados e definitivamente mais facilmente executada com pacotes
{tm: Text Mining Package}
como o mencionado) e acho que o que obtive pode estar relacionado a essa pergunta ou, de qualquer forma, esse pode ser um bom lugar para publicá-la.SET-UP: Eu tenho um corpus de
5
longos parágrafos retirados de mídia impressa,text 1
através de5
tais como The New York Times . Alegadamente, é um "corpo" muito pequeno, uma pequena biblioteca, por assim dizer, mas as entradas nessa biblioteca "digital" não são aleatórias: a primeira e a quinta entradas tratam de futebol (ou 'futebol' para 'clube social'). (?) por aqui) e, mais especificamente, sobre o melhor time de hoje. Então, por exemplo,text 1
começa como ...Muito agradável! Por outro lado, você definitivamente gostaria de pular o conteúdo nas três entradas intermediárias. Aqui está um exemplo (
text 2
):Então, o que fazer para evitar a todo custo "surfar" do
text 1
paratext 2
, enquanto continua a se alegrar na literatura sobre o todo-poderoso Barcelona FCtext 5
?TC-IDF: Eu isolei as palavras em todos os
text
vetores longos. Em seguida, contou a frequência de cada palavra, criando cinco vetores (um para cadatext
) nos quais apenas as palavras encontradas na correspondentetext
foram contadas - todas as outras palavras, pertencentes a outrastext
s, foram avaliadas em zero. No primeiro trecho detext 1
, por exemplo, seu vetor teria uma contagem de 1 para a palavra "Messi", enquanto "Trump" teria 0. Essa era a parte tc .A parte idf também foi calculada separadamente para cada uma
text
e resultou em 5 "vetores" (acho que os tratei como quadros de dados), contendo as transformações logarítmicas das contagens de documentos (infelizmente, apenas de zero a cinco, dada a nossa pequena biblioteca ) contendo uma determinada palavra como em:text
consideração em questão foi excluída da contagem . Mas se uma palavra aparecesse em todos os documentos, seu idf ainda estavatext
s.A multiplicação de entrada detc × idf para cada
text
era a importância de cada palavra para cada um dos itens da biblioteca - palavras prevalentes localmente e globalmente raras .COMPARAÇÃO: Agora, era apenas uma questão de executar produtos pontuais entre esses "vetores de importância das palavras".
Previsivelmente, o produto escalar de
text 1
withtext 5
era13.42645
, enquanto otext 1
v.text2
Era apenas2.511799
.O código R desajeitado (nada a imitar) está aqui .
Novamente, esta é uma simulação muito rudimentar, mas acho que é muito gráfica.
fonte