Tengo un conjunto de datos que representa 1000 documentos y todas las palabras que aparecen en él. Entonces las filas representan los documentos y las columnas representan las palabras. Entonces, por ejemplo, el valor en la celda representa las veces que la palabra aparece en el documento . Ahora, tengo que encontrar 'pesos' de las palabras, usando el método tf / idf, pero en realidad no sé cómo hacer esto. ¿Puede alguien ayudarme?
r
data-mining
feature-selection
A B C
fuente
fuente
Respuestas:
Wikipedia tiene un buen artículo sobre el tema, completo con fórmulas. Los valores en su matriz son las frecuencias del término. Solo necesita encontrar el idf:
(log((total documents)/(number of docs with the term))
y multiplicar los 2 valores.En R, puede hacerlo de la siguiente manera:
Aquí están los conjuntos de datos:
También puede ver el idf de cada término:
fuente
log((number of docs)/(number of docs containing the term))
. También podría simplemente filtrar los términos poco frecuentes.hay paquete tm (minería de texto) http://cran.r-project.org/web/packages/tm/index.html que debe hacer exactamente lo que necesita:
R es un lenguaje funcional, por lo que leer código puede ser complicado (por ejemplo, x en términos)
fuente
Su código tiene un error: colSums calcula el número de ocurrencias en el corpus, no el número de textos con la palabra.
Una versión informática tal sería:
fuente
Hay un nuevo paquete R que puede hacer esto: textir: Regresión inversa para análisis de texto
El comando relevante es
tfidf
, el ejemplo del manual:fuente
Llegué tarde a esta fiesta, pero estaba jugando con los conceptos de tc-idf (quiero enfatizar la palabra 'concepto' porque no seguí ningún libro para los cálculos reales; por lo tanto, pueden estar algo fuera de lugar, y definitivamente se lleva a cabo más fácilmente con paquetes como
{tm: Text Mining Package}
, como se mencionó), y creo que lo que obtuve puede estar relacionado con esta pregunta o, en cualquier caso, este puede ser un buen lugar para publicarlo.SET-UP: Tengo un corpus de
5
largos párrafos tomados de los medios de comunicación impresos,text 1
a través5
tales como The New York Times . Supuestamente, es un "cuerpo" muy pequeño, una pequeña biblioteca, por así decirlo, pero las entradas en esta biblioteca "digital" no son aleatorias: las entradas primera y quinta se refieren al fútbol (o 'fútbol' para 'club social' (?) por aquí), y más específicamente sobre el mejor equipo de hoy. Entonces, por ejemplo,text 1
comienza como ...¡Muy agradable! Por otro lado, definitivamente querrás omitir el contenido de las tres entradas intermedias. Aquí hay un ejemplo (
text 2
):Entonces, ¿qué hacer para evitar a toda costa "surfear" del
text 1
altext 2
, sin dejar de regocijarnos en la literatura sobre el todopoderoso FC Barcelona entext 5
?TC-IDF: aislé las palabras en todos
text
en vectores largos. Luego contó la frecuencia de cada palabra, creando cinco vectores (uno para cada unotext
) en los que solotext
se contaron las palabras encontradas en las correspondientes ; todas las demás palabras, pertenecientes a otrastext
s, se valoraron en cero. En el primer fragmento detext 1
, por ejemplo, su vector tendría un recuento de 1 para la palabra "Messi", mientras que "Trump" tendría 0. Esta era la parte tc .La parte idf también se calculó por separado para cada uno
text
y dio como resultado 5 "vectores" (creo que los traté como marcos de datos), que contienen las transformaciones logarítmicas de los recuentos de documentos (lamentablemente, solo de cero a cinco, dada nuestra pequeña biblioteca ) que contiene una palabra dada como en:text
text
text
COMPARACIONES: Ahora era solo cuestión de realizar productos de punto entre estos "vectores de importancia de palabras".
Como era de esperar, el producto punto de
text 1
withtext 5
era13.42645
, mientras quetext 1
v.text2
Era solo2.511799
.El código R torpe (nada que imitar) está aquí .
Nuevamente, esta es una simulación muy rudimentaria, pero creo que es muy gráfica.
fuente