anchor.diff:    "convert katakana to hiragana"
     (map 'string
          (lambda (char)
  -         (let ((class (gethash char *char-class-hash*)))
  +         (let* ((char (or (to-normal-char char) char))
  +                (class (gethash char *char-class-hash*)))
              (if class
                  (char (getf *all-characters* class) 0)
                  char)))
  
positive.code:                                (cdr (assoc match alist :test #'equal)))
                               :simple-calls t)))
  
  (defun normalize (str)
    (loop for i from 0 below (length str)
         for char = (char str i)
         for pos = (position char *full-width-chars*)
         if pos do (setf (char str i) (char *half-width-chars* pos)))
    (setf str (simplify-ngrams str *punctuation-marks*)))
    
  (defun split-by-regex (regex str)
  
negative.code:     "『" " «"  "』" "» "
      "〜" " - " "：" ": " "！" "! " "？" "? " "；" "; "))
  
  (defparameter *abnormal-chars*
    (concatenate 'string
                 "０１２３４５６７８９ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ＃＄％＆（）＊＋／〈＝〉？＠［］＾＿‘｛｜｝～"
                 "･ｦｧｨｩｪｫｬｭｮｯｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ"))
  
  (defparameter *normal-chars*
    (concatenate 'string "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#$%&()*+/<=>?@[]^_`{|}~"
                 "・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜"))
  
  (defparameter *katakana-regex* "[ァ-ヺヽヾー]")
  
  