Tôi có một tệp văn bản với một câu trên mỗi dòng. Tôi muốn lemmatize thế giới trong mỗi dòng bằng cách sử dụng hunspell (-s tùy chọn). Vì tôi muốn có các bổ đề của mỗi dòng một cách riêng biệt, sẽ không có ý nghĩa khi gửi toàn bộ tệp văn bản tới hunspell. Tôi cần phải gửi một dòng khác và có đầu ra hunspell cho mỗi dòng.Cách tương tác với quy trình nhập/xuất trong SBCL/Common Lisp
Làm theo các câu trả lời từ How to process input and output streams in Steel Bank Common Lisp?, tôi đã có thể gửi toàn bộ tệp văn bản cho hunspell một dòng khác nhưng tôi không thể thu được đầu ra của hunspell cho mỗi dòng. Làm thế nào tương tác với quá trình gửi dòng và đọc đầu ra trước khi gửi một dòng khác?
mã hiện tại của tôi để đọc các file văn bản toàn là
(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))))))
Một lần nữa, mã này cho tôi đầu ra của hunspell cho các tập tin văn bản nói chung. Tôi muốn có đầu ra của hunspell cho mỗi dòng đầu vào riêng biệt.
Bất kỳ ý tưởng nào?
@wvxvw chắc chắn! Nhưng hunspell có thể được sử dụng tương tác trong dấu nhắc. Nếu tôi bắt đầu nó với "hunspell -s". Đó là lý do tại sao tôi cho rằng tôi có thể làm cho nó hoạt động tương tác với CL. Chắc chắn cách tốt nhất nên được http://common-lisp.net/project/cffi/ nhưng tôi vẫn phải học cách làm việc với nó. –