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
5largos párrafos tomados de los medios de comunicación impresos,text 1a través5tales 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 1comienza 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 1altext 2, sin dejar de regocijarnos en la literatura sobre el todopoderoso FC Barcelona entext 5?TC-IDF: aislé las palabras en todos
texten vectores largos. Luego contó la frecuencia de cada palabra, creando cinco vectores (uno para cada unotext) en los que solotextse contaron las palabras encontradas en las correspondientes ; todas las demás palabras, pertenecientes a otrastexts, 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
texty 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:texttexttextCOMPARACIONES: 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 1withtext 5era13.42645, mientras quetext 1v.text2Era 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