Outils d'analyse de fichiers texte pour LispMe sur PalmOS, donnant la liste et la fréquence des mots d'un fichier de l'application "Memos".
Ce prototype de code pour expérimenter un comparateurs de textes par contenu, en recourant à un classifieur par apprentissage, de type carte auto-organisatrice (SOM) par exemple...
- La fonction l-o-w donne la liste des mots d'un "memo", chaque mot étant entouré par un ou plusieurs caractères spéciaux définis entre guillemets par la variable *s*;
- La fonction wcount calcule la fréquence d'une liste de mots à travers le filtre défini par la fonction word?, où :
- un mot est constirué de plus de 2 caractères;
- un nombre n'est pas un mot;
- la variable *nw* défini la liste des mots exclus (entre guillemets);
- les majuscules sont converties en minuscules...
exemple :

A faire :
- choisir la "catégorie" du mémo à analyser (fonction dir);
- appliquer sur une liste de mémos et/ou l'ensemble d'une "catégorie" (interface graphique ?);
- exporter les résultats dans un mémos;
- définir les mots exclus dqns un mémo;
- typer les entrées (liste ou string) selon la sortie désirée;
- implémenter un comparateur pour les fautes de frappes (distance d'édition);
- optimiser...
;txt stats
;fredvoisin:com
;separateurs
(define *s* "\"(/'-)!?[],:> <;.")
;mots exclus
(define *nw* '("une" "les" "ils" "elle" "elles" "ces" "cette" "ceux" "celle" "celles" "qui" "que" "dont" "quoi" "mais" "pour" "par" "dans" "ici" "ainsi" "tel" "tels" "telle" "telles" "laquelle" "lequel" "lesquels" "lesquelles" "auquel" "auxquels" "duquel" "desquels" "sinon" "enfin" "sans" "des"
))
(define (word? string w)
(if string
(if (or (< (length (string->list string)) 3) (member string w) (number? (string->object string)))
#f #t)))
(define (split liste s)
(let ((tmp (list)) (r (list)) (lsep (string->list s)))
(do ((i 0 (+ i 1))) ((= i (length liste)) (reverse (cons (reverse tmp) r)))
(if (member (list-ref liste i) lsep)
(begin (set! r (cons (reverse tmp) r)) (set! tmp (list)))
(set! tmp (cons (list-ref liste i) tmp))))))
(define (lchar2st lchar)
(let ((st (make-string (length lchar) #\ )))
(if (null? lchar) #f
(do ((i 0 (+ i 1))) ((= i (length lchar)) st)
(let* ((c (list-ref lchar i)) (n (char->integer c)))
(if (and (> n 64) (< n 91))
(string-set! st i (integer->char (+ 32 n)))
(string-set! st i c)))))))
(define (wcount los w)
(let ((r (list)))
(do ((i 0 (+ i 1))) ((= i (length los)) r)
(let ((c (list-ref los i)))
(if (word? c w)
(let ((a (assoc c r)))
(if a
(let ((p (position a r)))
(set-cdr! (list-ref r p) (list (+ 1 (cadr a)))))
(set! r (cons (list (list-ref los i) 1) r)))))))))
(define (l-o-w file s)
(let ((f (open-input-file file))
(l (list)) (line ""))
(do ((i 0 (+ i 1))) ((eof-object? line) (map lchar2st l))
(set! line (read-line f))
(if (not (eof-object? line))
(set! l (append (split (string->list line) s) l)) ))))
