Ich habe eine .NET-Anwendung, in der bei einem bestimmten Substantiv das Wort "a" oder "an" korrekt vorangestellt werden soll. Wie würde ich das machen?
Bevor Sie glauben, dass die Antwort darin besteht, einfach zu überprüfen, ob der erste Buchstabe ein Vokal ist, sollten Sie folgende Sätze berücksichtigen:
- ein ehrlicher Fehler
- ein Gebrauchtwagen
c#
nlp
linguistics
Ryeguy
quelle
quelle
Antworten:
Sie können wahrscheinlich nicht viel besser werden - und es wird sicherlich die meisten regelbasierten Systeme schlagen.
Edit: Ich habe dies in JS / C # implementiert . Sie können es in Ihrem Browser versuchen oder die kleine, wiederverwendbare Javascript-Implementierung herunterladen, die es verwendet. Die .NET-Implementierung ist ein Paket
AvsAn
auf Nuget . Die Implementierungen sind trivial, daher sollte es bei Bedarf einfach sein, sie in eine andere Sprache zu portieren.Es stellt sich heraus, dass die "Regeln" etwas komplexer sind als ich dachte:
... was nur unterstreicht, dass es schwierig wäre, ein regelbasiertes System aufzubauen!
quelle
Sie müssen eine Liste von Ausnahmen verwenden. Ich denke nicht, dass alle Ausnahmen gut definiert sind, da dies manchmal vom Akzent der Person abhängt, die das Wort sagt.
Eine dumme Möglichkeit besteht darin, Google nach den beiden Möglichkeiten zu fragen (mithilfe der Such-APIs) und die beliebtesten zu verwenden:
Oder:
Daher sind "ein Europa" und "ein ehrlicher" die richtigen Versionen.
quelle
Wenn Sie eine Quelle für Wortschreibweisen für Wortaussprachen finden könnten, wie:
Sie können Ihre Entscheidung auf das erste Zeichen der buchstabierten Aussprache stützen. Aus Gründen der Leistung könnten Sie möglicherweise eine solche Suche verwenden, um Ausnahmesätze vorab zu generieren und stattdessen diese kleineren Suchsätze während der Ausführung zu verwenden.
Bearbeitet, um hinzuzufügen:
!!! - Ich denke, Sie könnten dies verwenden, um Ihre Ausnahmen zu generieren: http://www.speech.cs.cmu.edu/cgi-bin/cmudict
Natürlich wird nicht alles im Wörterbuch enthalten sein - was bedeutet, dass nicht jede mögliche Ausnahme in Ihren Ausnahmesätzen auftaucht -, aber in diesem Fall können Sie einfach eine für Vokale / eine für Konsonanten verwenden oder eine andere Heuristik mit besseren Gewinnchancen verwenden.
(Als ich das CMU-Wörterbuch durchgesehen habe, war ich erfreut zu sehen, dass es Eigennamen für Länder und einige andere Orte enthält. Es enthält also Beispiele wie "ein Ukrainer", "eine Zeitung von USA Today", "ein vom Ural inspiriertes Gemälde".)
Nochmals bearbeiten, um hinzuzufügen: Das CMU-Wörterbuch enthält keine gebräuchlichen Akronyme, und Sie müssen sich um diejenigen kümmern, die mit s, f, l, m, n, u und x beginnen. Aber es gibt viele Akronymlisten, wie in Wikipedia, die Sie verwenden können, um die Ausnahmen zu ergänzen.
quelle
hawr-uh-buhl
bringt mich immer zum Lachen.Sie müssen manuell implementieren und die gewünschten Ausnahmen hinzufügen, z. B. wenn der erste Buchstabe "H" ist und gefolgt von einem "O" wie "ehrlich", "Stunde" ... und auch die entgegengesetzten wie "Europa", "Universität", "verwendet" ...
quelle
Da "a" und "an" durch phonetische Regeln und nicht durch Rechtschreibkonventionen bestimmt werden, würde ich es wahrscheinlich so machen:
quelle
Sie müssen sich die grammatikalischen Regeln für unbestimmte Artikel ansehen (es gibt nur zwei unbestimmte Artikel in der englischen Grammatik - "a" und "an"). Sie stimmen diesen möglicherweise nicht zu, aber die Regeln der englischen Grammatik sind sehr klar :
Hinweis Dies bedeutet einen Vokal - Sound , und nicht einen Vokal Brief . Zum Beispiel werden Wörter, die mit einem stillen "h" beginnen, wie "Ehre" oder "Erbe", als Vokale behandelt und daher mit "einem" fortgeführt - zum Beispiel "Es ist eine Ehre, Sie kennenzulernen". Wörter, die mit einem Konsonantenton beginnen, werden mit einem vorangestellt - weshalb Sie "ein Gebrauchtwagen" anstelle von "einem Gebrauchtwagen" sagen -, weil "gebraucht" eher einen "Joose" -Ton als einen "uhh" -Ton hat.
Als Programmierer sind dies die Regeln, die befolgt werden müssen. Sie müssen nur herausfinden, mit welchem Ton ein Wort beginnt und nicht mit welchem Buchstaben. Ich habe Beispiele dafür gesehen, wie dieses in PHP von Jaimie Sirovich:
Es ist wahrscheinlich am einfachsten, die Regel zu erstellen und dann eine Liste von Ausnahmen zu erstellen und diese zu verwenden. Ich kann mir nicht vorstellen, dass es so viele geben wird.
quelle
Mann, mir ist klar, dass dies wahrscheinlich ein festes Argument ist, aber ich denke, es kann einfacher beigelegt werden, als Ad-hoc-Grammatikregeln aus Wikipedia zu verwenden, die bestenfalls die einheimische Grammatik ableiten würden.
Die beste Lösung scheint darin zu bestehen, ein phonembasiertes Matching des folgenden Wortes mit einem oder einem Trigger zu verwenden, wobei bestimmte Phoneme immer mit "an" assoziiert sind und die verbleibenden zu "a" gehören.
Die Carnegie Mellon University bietet ein großartiges Online-Tool für diese Art von Überprüfungen - http://www.speech.cs.cmu.edu/cgi-bin/cmudict - und 125.000 Wörter mit den passenden 39 Phonemen. Das Einstecken eines Wortes liefert den gesamten phonemischen Satz, von dem nur der erste wichtig ist.
Wenn das Wort nicht im Wörterbuch angezeigt wird, z. B. "NSA", und alle groß geschrieben sind, kann das System annehmen, dass das Wort ein Akronym ist, und anhand des ersten Buchstabens anhand des gleichen ursprünglichen Regelsatzes bestimmen, welcher unbestimmte Artikel verwendet werden soll.
quelle
@ Nathan Long: Das Herunterladen von Wikipedia ist eigentlich keine schlechte Idee. Alle Bilder, Videos und anderen Medien werden nicht benötigt.
Ich habe ein (beschissenes) Programm in PHP und Javascript (!) Geschrieben, um die gesamte schwedische Wikipedia zu lesen (oder zumindest alle Artikel, die über den Artikel über Mathematik erreicht werden konnten, was der Anfang für meine Spinne war.)
Ich sammelte alle Wörter und internen Links in einer Datenbank und verfolgte auch die Häufigkeit jedes Wortes. Ich verwende das jetzt als Wortdatenbank für verschiedene Aufgaben: * Finden aller Wörter, die aus einem bestimmten Satz von Buchstaben (einschließlich Platzhalter) erstellt werden können. * Erstellt eine einfache Syntaxdatei für Schwedisch (alle Wörter, die nicht in der Datenbank enthalten sind, werden als falsch angesehen).
Oh, und das Herunterladen des gesamten Wikis dauerte ungefähr eine Woche, wobei mein Laptop die meiste Zeit mit einer 10-Mbit-Verbindung lief.
Wenn Sie gerade dabei sind, protokollieren Sie alle Vorkommnisse, die nicht mit der englischen Sprache übereinstimmen, und prüfen Sie, ob einige davon Fehler sind. Repariere sie und gib der Community etwas zurück.
quelle
Beachten Sie, dass es Unterschiede zwischen amerikanischen und britischen Dialekten gibt, wie Grammar Girl in ihrer Episode A Versus An hervorhob .
quelle
Schauen Sie sich Perls Lingua :: EN :: Inflect an . Siehe
sub _indef_article
im Quellcode.quelle
Ich habe eine Funktion aus Python (ursprünglich aus dem CPAN-Paket Lingua-DE-Inflect) portiert, die Vokale in C # korrekt bestimmt, und sie als Antwort auf die Frage veröffentlicht. Programmgesteuert bestimmen, ob ein Objekt mit einem oder einem? Beschrieben werden soll. . Sie können das Code-Snippet hier sehen .
quelle
Könnten Sie ein englisches Wörterbuch bekommen, in dem die Wörter unseres regulären Alphabets und das Internationale Phönetische Alphabet gespeichert sind? ?
Verwenden Sie dann die Phönetik, um den Anfangston des Wortes herauszufinden und ob „a“ oder „an“ angemessen ist?
Ich bin mir nicht sicher, ob das tatsächlich einfacher wäre (oder genauso viel Spaß macht wie) der statistische Wikipedia-Ansatz.
quelle
Ich würde einen regelbasierten Algorithmus verwenden, um so viele wie möglich abzudecken, und dann eine Liste von Ausnahmen verwenden. Wenn Sie Lust haben, können Sie versuchen, einige neue "Regeln" aus Ihrer Ausnahmeliste zu ermitteln.
quelle
Ich sehe nur aus wie eine Reihe von Heuristiken. Es muss etwas komplizierter sein und einige Dinge beantworten, auf die ich nie eine gute Antwort bekommen habe, zum Beispiel, wie man Abkürzungen behandelt ("eine Drehzahl" oder "eine Drehzahl"? Ich dachte immer, die letztere ist sinnvoller).
Eine schnelle Suche ergab Sprachbibliotheken, die über den Umgang mit dem englischen Singularpräfix sprechen, aber Sie können wahrscheinlich etwas finden, wenn Sie genug Dip graben. Und wenn nicht - Sie können jederzeit Ihre eigene Flexionsbibliothek schreiben und Weltruhm erlangen :-).
quelle
Ich nehme nicht an, dass Sie einfach ein paar Kesselplatten wie 'a / an' als einstufiges Deckblatt ausfüllen können. Andernfalls kommt es zu Vermutungsfehlern wie bei allen Wörtern mit 'h'. Fahren Sie fort mit 'o' get 'an' anstelle von 'a' like 'home' - (a home?). Grundsätzlich werden Sie am Ende die Logik der englischen Sprache einbeziehen oder gelegentlich seltene Fälle finden, die Sie dumm aussehen lassen.
quelle
Überprüfen Sie, ob ein Wort mit einem Vokal oder einem Konsonenten beginnt. Ein "u" ist im Allgemeinen ein Konsonant und ein Vokal ("yu") und gehört daher für Ihre Zwecke zur Konsonantengruppe.
Der Buchstabe "h" steht für einen gottalen Stopp (einen Konsonanten) in Französisch und in französischen Wörtern, die im Englischen verwendet werden. Sie können eine Liste dieser Vokale erstellen (in der Tat können "Ehre", "Ehre" und "Stunde" ausreichend sein) und sie als mit Vokalen beginnend zählen (da Englisch keinen Stimmritzenstopp erkennt).
Zählen Sie auch "eu" als Konsonanten usw.
Es ist nicht zu schwierig.
quelle
Die Wahl von a oder a hängt davon ab, wie das Wort ausgesprochen wird. Wenn Sie sich das Wort ansehen, können Sie nicht unbedingt die korrekte Aussprache erkennen, z. B. einen Jargon oder eine Abkürzung usw. Eine Möglichkeit besteht darin, ein Wörterbuch mit Unterstützung für Phoneme zu haben und anhand der mit dem Wort verknüpften Phoneminformationen zu bestimmen, ob ein "a "oder ein" an "sollte verwendet werden.
quelle
Ich kann nicht sicher sein, ob es die entsprechenden Informationen enthält, um "a" und "an" zu unterscheiden, aber die WordNet- Datenbank von Princeton existiert genau für ähnliche Aufgaben, daher halte ich es für wahrscheinlich, dass sich die Daten dort befinden . Es hat einige Zehntausende von Wörtern und Hunderttausende von Beziehungen zwischen diesen Wörtern (IIRC; ich kann die aktuellen Statistiken auf der Website nicht finden). Schau es dir an. Es kann kostenlos heruntergeladen werden.
quelle
Wie? Wie wäre es wann? Holen Sie sich das Substantiv mit Artikel im Anhang. Fragen Sie in einer bestimmten Form danach.
Fragen Sie nach dem Substantiv mit dem Artikel. Viele MUD-Codebasen speichern Elemente als Informationen, bestehend aus:
Die Schlüsselwortform könnte "Kurzschwert rostig" sein. Die Kurzform wird "ein Schwert" sein. Die lange Form wird "ein rostiges Kurzschwert" sein.
Schreiben Sie einen Webdienst "a vs. an"? Machen Sie einen Schritt zurück und prüfen Sie, ob Sie dieses Leck weiter stromaufwärts angreifen können. Sie können einen Damm bauen, aber wenn Sie ihn nicht am Fließen hindern, wird er irgendwann überlaufen.
Bestimmen Sie, wie kritisch dies ist, und wählen Sie, wie andere vorgeschlagen haben, "schnell, aber grob" oder "teuer, aber robust".
quelle
Die Regel ist sehr einfach. Wenn das nächste Wort mit einem Vokalton beginnt, verwenden Sie 'an'. Wenn es mit einem Konsonanten beginnt, verwenden Sie 'a'. Das Schwierige ist, dass unsere Schulklassifikation von Vokalen und Konsonanten nicht funktioniert. Das 'h' in 'Ehre' ist ein Vokal, aber das 'h' in 'Krankenhaus' ist ein Konsonant.
Schlimmer noch, einige Wörter wie "ehrlich" beginnen mit einem Vokal oder einem Konsonanten, je nachdem, wer sie sagt. Schlimmer noch, einige Wörter ändern sich abhängig von den Wörtern um sie herum für einige Sprecher.
Das Problem ist nur dadurch begrenzt, wie viel Zeit und Mühe Sie investieren möchten. Sie können in wenigen Minuten etwas in einem Paar schreiben, indem Sie 'aeiou' als Vokale verwenden, oder Sie können Monate damit verbringen, sprachliche Analysen Ihrer Zielgruppe durchzuführen. Dazwischen gibt es eine Vielzahl von Heuristiken, die für einige Sprecher richtig und für andere falsch sind - aber da verschiedene Sprecher unterschiedliche Bestimmungen für dasselbe Wort haben, ist es einfach nicht möglich, immer richtig zu sein, egal wie Sie es tun es.
quelle
Der ideale Ansatz wäre, online einen Ort zu finden, an dem Sie die Antworten erhalten, dynamisch abfragen und die Antworten zwischenspeichern können. Sie können das System zunächst mit ein paar hundert Wörtern vorbereiten.
(Ich kenne keine solche Online-Quelle, aber ich wäre nicht überrascht, wenn es eine gibt.)
quelle
Eine vernünftige Lösung ist also möglich, ohne das gesamte Internet herunterzuladen. Folgendes habe ich getan:
Ich erinnerte mich, dass Google hier seine Rohdaten für die N-Gram-Frequenzen von Google Books veröffentlicht hat . Also habe ich die 2-Gramm-Dateien für "a_" und "an" heruntergeladen. Es sind ungefähr 26 Gigs, wenn ich mich richtig erinnere. Daraus erstellte ich eine Liste von Zeichenfolgen, denen überwiegend der entgegengesetzte Artikel vorausging, den Sie erwarten würden (wenn wir erwarten würden, dass Vokale ein "an" nehmen). Diese letzte Liste von Wörtern konnte ich in weniger als 7 Kilobyte speichern.
quelle
Sie verwenden "a", wenn das nächste Wort kein Vokal ist? Und Sie verwenden "ein", wenn es einen Vokal gibt?
Könnten Sie nicht einfach einen regulären Ausdruck wie "a \ s [a, e, i, o, u]. *" Machen? Und dann durch ein "an?"
quelle