Frage

Ich möchte die Häufigkeit von berechnen Funktionswörter in Python/nltk. Ich sehe zwei Möglichkeiten:

  • Verwenden Sie einen Teil des Speech-Taggers und summieren
  • Erstellen Sie eine Liste von Funktionswörtern und führen Sie eine einfache Übersicht durch

Der Haken im ersten Fall ist, dass meine Daten laut sind und ich weiß nicht (sicher), welche POS -Tags als Funktionswörter darstellen. Der Haken im zweiten Fall ist, dass ich keine Liste habe und da meine Daten laut sind, ist die Suche nicht genau.

Ich würde den ersten bis zum zweiten oder anderen Beispiel bevorzugen, das mir genauere Ergebnisse erzielen würde.

War es hilfreich?

Lösung

Ich habe gerade das benutzt Liwc Englisch 2007 Dictionary (ich bezahlte das gleiche) und führte ab sofort eine einfache Suche durch. Alle anderen Antworten sind sehr willkommen.

Ich muss sagen, ich bin ein wenig überrascht von der Impulsivität ein paar Antworten hier. Seitdem fragte jemand nach Code. Hier ist, was ich getan habe:

''' 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)

Jeder, der einen Code in Python gemacht hat, würde Ihnen sagen, dass es keine Rocket Science ist, einen Look -Up- oder Extrahieren von Wörtern mit bestimmten POS -Tags durchzuführen. Zum hinzuzufügen, Tags (zur Frage) von NLP (natürliche Sprachverarbeitung) und NLTK (natürliches Sprache -Toolkit) sollten ausreichend Anzeichen für die kluger Meinung sein.

Wie auch immer, ich verstehe und respektiere die Gefühle von Menschen, die hier antworten, da das meiste davon kostenlos ist, aber ich denke, das Mindeste, was wir tun können, ist, Fragenplakaten ein wenig Respekt zu zeigen. Wie zu Recht darauf hingewiesen wird, wird Hilfe empfangen, wenn Sie anderen helfen, ebenso respektieren sich der Respekt, wenn der andere Respekt anderer ist.

Andere Tipps

Sie wissen nicht, welcher Ansatz funktioniert, bis Sie es versuchen. Ich empfehle jedoch den ersten Ansatz; Ich habe es mit Erfolg bei sehr lauten Daten verwendet, bei denen die "Sätze", bei denen E -Mail -Header (kurze Texte, nicht richtige Sätze) und sogar die Sprache unbekannt waren (etwa 85% Englisch; der Havnar & Trenkle -Algorithmus brach schnell zusammen) . Erfolg wurde als erhöhte Abrufleistung in einer Suchmaschine definiert; Wenn Sie nur Frequenzen zählen möchten, ist das Problem möglicherweise einfacher.

Stellen Sie sicher, dass Sie einen POS -Tagger verwenden, der den Kontext berücksichtigt (die meisten tun dies). Überprüfen Sie die Liste der Wörter und Frequenzen, die Sie erhalten, und beseitigen Sie möglicherweise einige Wörter, die Sie nicht als Funktionswörter betrachten, oder filtern Sie sogar Wörter heraus, die zu lang sind. Das wird die falsch positiven Ergebnisse beseitigen.

(Haftungsausschluss: Ich habe den Stanford POS -Tagger verwendet, nicht NLTK, also ymmv. Ich habe eines der Standardmodelle für Englisch verwendet. Ich glaube, am Penn Treebank.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top