Pregunta

Me gustaría calcular la frecuencia de palabras de función En Python/Nltk. Veo dos formas de hacerlo:

  • Use el etiquetador de parte del discurso y resume en las etiquetas POS que constituyen las palabras de funcionamiento
  • Cree una lista de palabras de funciones y realice una búsqueda simple

La captura en el primer caso es que mis datos son ruidosos y no sé (seguro) qué etiquetas POS constituyen como palabras de función. La captura en el segundo caso es que no tengo una lista y, dado que mis datos son ruidosos, la búsqueda no será precisa.

Preferiría el primero al segundo o cualquier otro ejemplo que me arroje resultados más precisos.

¿Fue útil?

Solución

Acabo de usar el Liwc Diccionario Inglés 2007 (pagué por lo mismo) y realicé una búsqueda simple a partir de ahora. Cualquier otra respuesta es más bienvenida.

Debo decir que estoy un poco sorprendido por la impulsividad de un par de respuestas aquí. Desde entonces, alguien pidió código. Esto es lo que hice:

''' Returns frequency of function words '''
def get_func_word_freq(words,funct_words):
    fdist = nltk.FreqDist([funct_word for funct_word in funct_words if funct_word in words]) 
    funct_freq = {}    
    for key,value in fdist.iteritems():
        funct_freq[key] = value
    return funct_freq

''' Read LIWC 2007 English dictionary and extract function words '''
def load_liwc_funct():
    funct_words = set()
    data_file = open(liwc_dict_file, 'rb')
    lines = data_file.readlines()
    for line in lines:
        row = line.rstrip().split("\t")
        if '1' in row:
            if row[0][-1:] == '*' :
                funct_words.add(row[0][:-1])
            else :
                funct_words.add(row[0])
    return list(funct_words)

Cualquiera que haya hecho algún código en Python le diría que realizar una mirada o extraer palabras con etiquetas de POS específicas no es ciencia espacial. Para agregar, las etiquetas (en la pregunta) de PNL (procesamiento del lenguaje natural) y NLTK (kit de herramientas de lenguaje natural) deben ser suficientes indicaciones para la mentalidad astuta.

De todos modos, entiendo y respeto los sentimientos de las personas que responden aquí, ya que la mayor parte es gratuita, pero creo que lo menos que podemos hacer es mostrar un poco de respeto a los carteles de preguntas. Como es correcto, se recibe ayuda cuando ayuda a otros, de manera similar se recibe el respeto cuando un respeto es otros.

Otros consejos

No sabes qué enfoque funcionará hasta que lo intentes. Sin embargo, recomiendo el primer enfoque; Lo he usado con éxito en datos muy ruidosos, donde las "oraciones" donde los encabezados de los sujetos de correo electrónico (textos cortos, no las oraciones adecuadas) e incluso el idioma era desconocido (un 85% inglés; el algoritmo Cavnar & Trenkle se rompió rápidamente) . Éxito se definió como un mayor rendimiento de recuperación en un motor de búsqueda; Si solo desea contar las frecuencias, el problema puede ser más fácil.

Asegúrese de usar un etiquetador POS que tenga en cuenta el contexto (la mayoría lo hace). Inspeccione la lista de palabras y frecuencias que obtiene y tal vez elimine algunas palabras que no considere palabras de función, o incluso filtren palabras que son demasiado largas; Eso eliminará los falsos positivos.

(Descargo de responsabilidad: estaba usando el Tagger Stanford POS, no NLTK, por lo que YMMV. Usé uno de los modelos predeterminados para inglés, creo, creo, en Penn Treebank).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top