python - tutorial - cómo calcular la matriz de documento de término?
numpy tutorial español pdf (1)
Sé que Term-Document Matrix es una matriz matemática que describe la frecuencia de los términos que ocurren en una colección de documentos. En una matriz de documento y plazo, las filas corresponden a documentos en la colección y las columnas corresponden a términos.
Estoy usando CountVectorizer de sklearn para extraer características de cadenas (archivo de texto) para facilitar mi tarea. El siguiente código devuelve una matriz de documento de términos de acuerdo con la documentación de sklear
from sklearn.feature_extraction.text import CountVectorizer
import numpy as np
vectorizer = CountVectorizer(min_df=1)
print(vectorizer)
content = ["how to format my hard disk", "hard disk format problems"]
X = vectorizer.fit_transform(content) #X is Term-document matrix
print(X)
El resultado es el siguiente
No entiendo cómo se ha calculado esta matriz. Por favor, analicen el ejemplo que se muestra en el código. He leído un ejemplo más de la Wikipedia pero no pude entender.
La salida de un CountVectorizer().fit_transform()
es una matriz dispersa. Significa que solo almacenará los elementos distintos de cero de una matriz. Cuando print(X)
, solo se mostrarán las entradas que no sean cero a medida que observa en la imagen.
En cuanto a cómo se realiza el cálculo, puede consultar la documentación oficial aquí .
El CountVectorizer
en su configuración predeterminada, tokenize el documento dado o el texto en bruto (Tomará solo los términos que tienen 2 o más caracteres en él) y contar las ocurrencias de palabras.
Básicamente, los pasos son los siguientes:
Paso 1: reúne todos los términos diferentes de todos los documentos presentes en
fit()
.Para sus datos, son
[u''disk'', u''format'', u''hard'', u''how'', u''my'', u''problems'', u''to'']
Esto está disponible envectorizer.get_feature_names()
Paso 2: en la
transform()
, cuente el número de términos en cada documento que estaban presentes en elfit()
en la matriz de frecuencia de términos.En su caso, está suministrando ambos documentos a transform () (
fit_transform()
es una abreviatura defit()
y luegotransform()
). Entonces, el resultado es[u''disk'', u''format'', u''hard'', u''how'', u''my'', u''problems'', u''to'']
Primero 1 1 1 1 1 0 1
Sec 0 1 1 0 0 1 0
Puede obtener el resultado anterior llamando a X.toarray()
.
En la imagen de la impresión (X) que publicó, la primera columna representa el índice de la matriz de término-frecuencia y la segunda representa la frecuencia de ese término.
<0,0>
significa primera fila, primera columna, es decir, frecuencias del término "disk" (first term in our tokens)
en el primer documento = 1
<0,2>
significa primera fila, tercera columna, es decir, frecuencias del término "hard" (third term in our tokens)
en el primer documento = 1
<0,5>
significa primera fila, sexta columna, es decir, frecuencias del término "problems" (sixth term in our tokens)
en el primer documento = 0. Pero dado que es 0, no se muestra en su imagen.