我正在尝试从文本文件中读取字符串;并使用方案提供关于每个单词出现的“统计数据”,并提供最常用的单词。
EXP:
string = "one two, tree one two"
得到:
one: 2
two: 2
tree: 1
我可以使用一个简单的函数计数器对每个单词进行计数,并在屏幕上显示结果,但我找不到使用此结果显示例如最多5个用过的单词的方法,例如在巨大的输入文本中 - 例如一本书 - 。
答案 0 :(得分:1)
以下是另一个StackOverflow问题的提示(我找不到)。
(define (tokenize file)
(with-input-from-file file
(lambda ()
(let reading ((lines '()) (words '()) (chars '()))
(let ((char (read-char)))
(if (eof-object? char)
(reverse lines)
(case char
((#\newline) (reading (cons (reverse (cons (reverse chars) words)) lines) '() '()))
((#\space) (reading lines (cons (reverse chars) words) '()))
(else (reading lines words (cons char chars))))))))))
这将返回一个行列表,这是一个单词列表,这是一个字符列表。你可以得到一个字符串列表:
(map list->string (apply append (tokenize <someffile>)))
从那起:
(define (frequency-alist words)
(let ((alist '()))
(let scanning ((words words))
(if (null? words
alist
(let ((word (car words)))
(cond ((assoc word alist)
=> (lambda (al-item)
(set-cdr! al-item (+ 1 (cdr al-item)))))
(else (set! alist (cons (cons word 1) alist))))
(scanning (cdr words)))))))