Ich habe eine Textdatei mit einem Satz pro Zeile. Ich möchte die Welten in jeder Zeile mit hunspell (-s Option) lemmatisieren. Da ich die Lemmas jeder Zeile getrennt haben möchte, wäre es nicht sinnvoll, die gesamte Textdatei an hunspell zu senden. Ich muss eine Zeile nach der anderen senden und die Hunspell-Ausgabe für jede Zeile haben.Wie man mit einer Prozesseingabe/-ausgabe in SBCL/Common Lisp arbeitet
Den Antworten von How to process input and output streams in Steel Bank Common Lisp? folgend, konnte ich die ganze Textdatei für hunspell eine Zeile nach der anderen senden, aber ich war nicht in der Lage, die Ausgabe von hunspell für jede Zeile zu erfassen. Wie interagieren Sie mit dem Prozess Senden der Zeile und Lesen der Ausgabe vor dem Senden einer anderen Zeile?
Mein aktueller Code die gesamte Textdatei ist
(defun parse-spell-sb (file-in)
(with-open-file (in file-in)
(let ((p (sb-ext:run-program "/opt/local/bin/hunspell" (list "-i" "UTF-8" "-s" "-d" "pt_BR")
:input in :output :stream :wait nil)))
(when p
(unwind-protect
(with-open-stream (o (process-output p))
(loop
:for line := (read-line o nil nil)
:while line
:collect line))
(process-close p))))))
Noch einmal, dieser Code zu lesen, geben Sie mir die Ausgabe von hunspell für die gesamte Textdatei. Ich möchte die Ausgabe von Hunspell für jede Eingabezeile getrennt haben.
Irgendeine Idee?
@wvxvw sicher! Aber hunspell kann interaktiv in der Eingabeaufforderung verwendet werden. Wenn ich es mit "hunspell -s" beginne. Deshalb habe ich angenommen, dass ich es interaktiv mit CL machen kann. Sicher sollte der beste Weg http://common-lisp.net/project/cffi/ sein, aber ich muss immer noch lernen, damit zu arbeiten. –