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 fonctionword?
, 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)) ))))