Hilfe bei einem Code - Untypische Wörter entfernen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
merve28
User
Beiträge: 18
Registriert: Mittwoch 9. März 2016, 19:38

[Codebox=python file=Unbenannt.py][/Codebox]

Hallo, ich bin Programmieranfänger und bräuchte im Folgenden Hilfe:
Ich möchte aus einem Dokument untypische Wörter wie oh, yeah o. ä. entfernen und habe dafür folgenden Code geschrieben:
def unusual_words(text):
text_vocab = set(w.lower() for w in text if w.isalpha())
nonsense_words = set(w.lower() for w in ("C:\Python34\my_corpus\non_words"))
unusual = text_vocab - nonsense_words
return sorted(unusual)

Durch das "set" taucht bei der Ausgabe jedes Wort nur einmal auf, jedoch ist es für meine Arbeit wichtig, zu wissen, wie oft gewisse Wörter im Text vorkommen. Wie könnte ich den Code umändern, sodass nur untypische Wörter entfernt werden und alles weitere so bleibt? Set einfach weglassen funktioniert nicht, da dann eine Fehlermeldung kommt.

LG
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Geh einmal durch den Text und zähle via DefaultDict. Zwei Mengen finde ich hier in dem Kontext recht komisch, aber wenn das dein Ergebnis sein soll.
Zuletzt geändert von darktrym am Mittwoch 9. März 2016, 20:01, insgesamt 1-mal geändert.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
merve28
User
Beiträge: 18
Registriert: Mittwoch 9. März 2016, 19:38

https://github.com/amoibos/]Github[/url
Verstehe leider nicht, was du meinst.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@merve28: nimm statt eines Sets einfach collections.Counter.
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Erstens entfernst du nicht nur alle untypischen Wörter, du zerstörst auch die Struktur mit deiner Menge. Und im Pseudocode:

Erstelle Filterliste
Gehe durch Liste der Wörter
Ist das Wort in der Filterliste wird's nicht übernommen und gezählt andernfalls einfach übernehmen.

Ich nehme mal an "gewisse Wörter" steht für die Anzahl wie oft der Filter griff.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

merve28 hat geschrieben:[Codebox=python file=Unbenannt.py][/Codebox]

Hallo, ich bin Programmieranfänger und bräuchte im Folgenden Hilfe:
Ich möchte aus einem Dokument untypische Wörter wie oh, yeah o. ä. entfernen und habe dafür folgenden Code geschrieben:
def unusual_words(text):
text_vocab = set(w.lower() for w in text if w.isalpha())
nonsense_words = set(w.lower() for w in ("C:\Python34\my_corpus\non_words"))
unusual = text_vocab - nonsense_words
return sorted(unusual)

Durch das "set" taucht bei der Ausgabe jedes Wort nur einmal auf, jedoch ist es für meine Arbeit wichtig, zu wissen, wie oft gewisse Wörter im Text vorkommen. Wie könnte ich den Code umändern, sodass nur untypische Wörter entfernt werden und alles weitere so bleibt? Set einfach weglassen funktioniert nicht, da dann eine Fehlermeldung kommt.

LG
Es ist eigentlich völlig unklar was du von deinem Programm erwartest. Sollen nun Wörter gezählt werden? In deinem Code bezeichnest du mit "unusual" genau die Wörter die du nicht als untypisch ansiehst.

Offenbar hast du eine liste von Wörtern in der Datei "non_words".

Willst du nun den Text erhalten, aus dem die Wörter, die in der Datei "non_words" entfernt wurden? Dann kannst du dich wohl nicht mit einer "set" zufrieden geben, wo ja die Textstruktur völlig zerstört wurde. Was willst du eigentlich erreichen mit deinem Programm?
merve28
User
Beiträge: 18
Registriert: Mittwoch 9. März 2016, 19:38

Ja ich möchte am Ende ein Text haben, wo alle untypischen Wörter entfernt wurden und ja ich habe eine Datei mit einer Liste von untypischen Wörtern.
Allgemein geht es darum, dass ich aus vielen Texten die wichtigsten Wörter herausfinden möchte und da es sich bei meinen Texten um Lieder handelt kommen Wörter, wie oh, yeah etc. häufig vor und treten am Ende auch bei den häufigsten Wörtern auf. Um das zu verhindern möchte ich sie gerne aus meinen Texten entfernen. Und suche dafür einen Code, wo ich ohne set das hinbekomme
BlackJack

@merve28: Also sind ”untypische” Wörter die die am häufigsten vorkommen‽ Verwirrend! :-)
merve28
User
Beiträge: 18
Registriert: Mittwoch 9. März 2016, 19:38

ja, bei Lieder, die wenig Text haben und häufig nananananana gesungen wird, kommen solche untypischen Wörter am häufigsten vor.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich war letzten Samstag bei einem Scooter Konzert und kann das nicht bestätigen! "Döp" ist ein absolut typisches Wort in dem Kontext :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten