Ist es möglich, Terminals aus einer Textdatei zu einem Lexikon in Rascal abgerufen anhängen? Dies würde zur Laufzeit passieren, und ich sehe keinen offensichtlichen Weg, dies zu erreichen. Ich würde die Daten lieber vom Rascal-Projekt trennen. Wenn ich zum Beispiel eine Liste von Ländern aus einer Textdatei gelesen hätte, wie würde ich diese zu einem Lexikon hinzufügen (mit dem Schlüsselwort lexical
)?Anfügen Textdatei in Rascal Lexikon
Antwort
In der datenabhängigen Version des Rascal Parsers dieser ist noch einfacher und schneller, aber wir haben das noch nicht veröffentlicht worden. Denn jetzt würde ich eine allgemeine Regel mit einem Post-Parse-Filter schreiben, etwa so:
rascal>set[str] lexicon = {"aap", "noot", "mies"};
set[str]: {"noot","mies","aap"}
rascal>lexical Word = [a-z]+;
ok
rascal>syntax LexiconWord = word: Word w;
ok
rascal>LexiconWord word(Word w) { // called when the LexiconWord.word rule is use to build a tree
>>>>>>> if ("<w>" notin lexicon)
>>>>>>> filter; // remove this parse tree
>>>>>>> else fail; // just build the tree
>>>>>>>}
rascal>[Sentence] "hello"
|prompt:///|(0,18,<1,0>,<1,18>): ParseError(|prompt:///|(0,18,<1,0>,<1,18>))
at $root$(|prompt:///|(0,64,<1,0>,<1,64>))
rascal>[Sentence] "aap"
Sentence: (Sentence) `aap`
rascal>
Da die filter
Funktion alle möglichen Ableitungen für hello
entfernt, der Parser liefert schließlich einen Parse-Fehler auf hello
. Es tut dies nicht für aap
, die im Lexikon ist, also hurra. Mit dieser Art der Filterung können Sie natürlich interessante Ableitungen machen. Menschen schreiben manchmal mehrdeutige Grammatiken und verwenden Filter wie diese, um sie eindeutig zu machen.
Parsing und Filterung auf diese Weise ist in Kubikzeit worst-case in Bezug auf die Länge der Eingabe, wenn die Filterfunktion in den fortgeführten Anschaffungs konstante Zeit ist. Wenn die Grammatik linear ist, dann ist natürlich auch der gesamte Prozess linear.
Eine ganz andere Antwort wäre, dynamisch die Grammatik zu aktualisieren und einen Parser daraus zu generieren. Dabei geht es gegen die innere Grammatik Darstellung von Rascal arbeiten wie folgt:
set[str] lexicon = {"aap", "noot", "mies"};
syntax Word = ; // empty definition
typ = #Word;
grammar = typ.definitions;
grammar[sort("Word")] = { prod(sort("Word"), lit(x), {}) | x <- lexicon };
newTyp = type(sort("Word"), grammar);
Diese Newtype ist eine verdinglichte Grammatik + Art für die Definition des Lexikons, und die nun wie so verwendet werden:
import ParseTree;
if (type[Word] staticGrammar := newType) {
parse(staticGrammar, "aap");
}
Nun al geschrieben zu haben diese zwei Dinge:
- ich denke, das unbekannte Fehler auslösen können, da wir nicht dynamisch Parsergenerierung testen haben, und
- Für ein Lexikon mit einer vernünftigen Größe erzeugt dies einen äußerst langsamen Parser, da der Parser für Schlüsselwörter in Programmiersprachen und nicht für große Lexika optimiert ist.
- 1. Parsing Kommentar in Rascal
- 2. Anfügen von JSON-Dateien an Textdatei
- 3. Anfügen einer Textdatei an eine E-Mail
- 4. Anfügen eines Satzes mit einer Textdatei
- 5. Sentimentanalyse - wordNet, sentiWordNet Lexikon
- 6. Anfügen eine modifizierten Benutzereingabe in eine vorhandenen Textdatei
- 7. Benutzerdefinierte Rascal-Standortprotokolle für M3
- 8. Verwenden der Listenrekursion in Rascal-Funktionsdefinitionen
- 9. Entspricht nicht brechendem Leerzeichen in Rascal
- 10. Anfügen neuer Werte an eine Liste aus einer Textdatei
- 11. Python Quelldatei Analyse und Transformation mit Rascal
- 12. Wie verwende ich ein Lexikon mit SpeechSynthesizer?
- 13. Verknüpfen von Java-Klassenmethoden mit Rascal Shell
- 14. Ist es möglich, in Rascal eigene Operatoren zu definieren?
- 15. ersetzt einen Teil in Keys eines Lexikon C#
- 16. Wie entfernt man Whitespace von einer Zeichenkette in Rascal?
- 17. Anfügen Datenrahmen in Pandas
- 18. Anfügen in Python
- 19. Anfügen Funktion in Python
- 20. Anfügen Liste in Lisp
- 21. Anfügen mehrere Textdateien Wörterbücher Python
- 22. Anfügen einer Textdatei in PHP mit JSON, funktioniert nicht und keine Fehlermeldung wird angezeigt
- 23. Gibt es ein Unit-Testing-Framework für Rascal?
- 24. Ist es möglich, NLTKs Vader Sentiment-Lexikon zu bearbeiten?
- 25. Abhilfe: JavaScript-Lexikon, welche Objekte als Schlüssel nimmt
- 26. Tuple-Lexikon-Suche, die keine volle Zeichenfolge zurückgibt
- 27. Rascal Funktion mit abstrakten Mustern als formaler Parameter
- 28. Rascal Tests von Shell für CI Zwecke initiieren
- 29. Flüssigkeitseingang-anfügen in Bootstrap Responsive
- 30. Anfügen von Bildern in Array
Jede Idee, wenn die datenabhängige Version zugänglich ist? – rien333
Keine klare Idee. Es gibt einen großen Rückstand auf das Schurkenprojekt und wir arbeiten jetzt an anderen Prioritäten. – jurgenv
Sie könnten versuchen, Leguan oder Erdmännchen, für die Analyse mit Datenabhängigkeit, siehe Github. – jurgenv