英文字変換


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

自然言語処理では様々な文字を取り扱います。
その際、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

このようにリスト処理は書き方を少しだけ変えるだけで様々な処理を記述することができます。