英文字変換

自然言語処理では様々な文字を取り扱います。
その際、ABCとabcを全く同じものとしたり別々のものとしたい時が別れることがあります。
今回は小文字や全角を全て半角大文字に変換するプログラムを書いてみましょう。

convalpha(A,X):-
	name(A,B),
	convsalpha(B,Y),
	name(X,Y).

convsalpha([],[]):-!.

convsalpha([A|L],[B|S]):-A>96,A<123,!,B is A-32,convsalpha(L,S). %[a-z]=[97-122]

%shift-jis
convsalpha([A|L],[B|S]):-A>33375,A<33402,!,B is A-33311,convsalpha(L,S). %[A-Z]=[33376-33401]
convsalpha([A|L],[B|S]):-A>33408,A<33435,!,B is A-33344,convsalpha(L,S). %[a-z]=[33409-33434]
convsalpha([A|L],[B|S]):-A>33358,A<33368,!,B is A-33311,convsalpha(L,S). %[0-9]=[33359-33368]

%utf8
convsalpha([A|L],[B|S]):-A>15711392,A<15711419,!,B is A-15711328,convsalpha(L,S). %[A-Z]=[15711393-15711418]
convsalpha([A|L],[B|S]):-A>15711616,A<15711643,!,B is A-15711552,convsalpha(L,S). %[a-z]=[15711617-15711642]
convsalpha([A|L],[B|S]):-A>15711375,A<15711386,!,B is A-15711328,convsalpha(L,S). %[0-9]=[15711376-15711385]
convsalpha([A|L],[A|S]):-convsalpha(L,S).

実際にコンサルトして確認してみましょう。
| ?-convalpha(abc,X).
X       = ABC
yes
| ?-convalpha('abc',X).
X       = ABC
| ?-convalpha(aBC,X).
X       = ABC

このようにリスト処理は書き方を少しだけ変えるだけで様々な処理を記述することができます。
最終更新:2014年05月07日 17:38