| Lingua-ZH-HanDetect documentation | Contained in the Lingua-ZH-HanDetect distribution. |
Lingua::ZH::HanDetect - Guess Chinese text's variant and encoding
This document describes version 0.04 of Lingua::ZH::HanDetect, released June 27, 2003.
use Lingua::ZH::HanDetect;
# $encoding is 'big5-hkscs', 'big5', 'gbk', 'euc-cn', 'utf8' or ''
# $variant is 'traditional', 'simplified' or ''
my ($encoding, $variant) = han_detect($some_chinese_text);
Lingua::ZH::HanDetect uses statistical measures to test a text string to see if it's in Traditional or Simplified Chinese, as well as which encoding it is in.
If the string does not contain Chinese characters, both the encoding and variant values will be set to the empty string.
This module is needed because the various encodings for Chinese text
tend to occupy the similar byte ranges, rendering Encode::Guess
ineffective.
Autrijus Tang <autrijus@autrijus.org>
Copyright 2003 by Autrijus Tang <autrijus@autrijus.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Lingua-ZH-HanDetect documentation | Contained in the Lingua-ZH-HanDetect distribution. |
# $File: //member/autrijus/Lingua-ZH-HanDetect/HanDetect.pm $ $Author: autrijus $ # $Revision: #4 $ $Change: 6772 $ $DateTime: 2003/06/27 04:42:27 $ package Lingua::ZH::HanDetect; $Lingua::ZH::HanDetect::VERSION = '0.04'; use bytes; use strict; use vars qw($VERSION @ISA @EXPORT $columns $overflow); use Exporter;
@ISA = qw(Exporter); @EXPORT = qw(han_detect); my (%rev, %map); sub han_detect { my $text = shift; my %count; while (my ($k, $v) = each %rev) { next unless index($text, $k) > -1; $count{$_}++ for keys %$v; } my $trad = delete($count{trad}) || 0; my $simp = delete($count{simp}) || 0; my $encoding = (sort { $count{$b} <=> $count{$a} } keys %count)[0] || ''; return $encoding unless wantarray; return($encoding, ($encoding ? (($trad < $simp) ? 'simplified' : 'traditional') : '')); } 1; # data section -- no user-servicable parts inside. {{{ %map = ( big5_trad => [qw( ª© ±q ¾Ç °ª ¬ì ªk ªí ³£ ´Á ¦h °ê ¹q ¶m ¦p ¤w ¤º ¥| Ãþ »¡ ¦¹ ªL ¦Ü ¤å Åý ¯à °¢ ¶¡ ·~ ¿ý ¥D ³¯ À³ ¨Ã ¦a ¤¸ ¸ô ¥Î ´N ¦ý ¤G ¨ì ¨ä ³o «á ¥Ñ µ¥ ¨Ó ¥L ¤T ¥i ¥» ¦W n ¶ ¤p ªÌ ¯¸ ¤ë ©ó ¤é °Ï ½Ð ·| ±N ³Ç ¤£ ®É ¤] ¸¹ ¶© §A ¹ï ¦Ó ¤j ·s ©Ò ©M ±z ¤U ¦~ ²Ä ¤H «e ©Î ¤F ¥H ¬° ¤¤ ¦³ §Ú ¤W ¤@ ¬O ºô ¦^ »P ¦b ¤Î ¤§ ªº )], gbk_simp => [qw( °æ ´Ó ѧ ¸ß ¿Æ ·¨ ±í ¶¼ ÆÚ ¶à ¹ú µç Ïç Èç ÒÑ ÄÚ ËÄ Àà ˵ ´Ë ÁÖ ÖÁ ÎÄ Èà ÄÜ É ¼ä Òµ ¼ Ö÷ ³Â Ó¦ ²¢ µØ Ôª · Óà ¾Í µ« ¶þ µ½ Æä Õâ áá ÓÉ µÈ À´ Ëû Èý ¿É ±¾ Ãû Òª Ò³ С Õß Õ¾ ÔÂ ì¶ ÈÕ Çø Çë »á ½« ½Ü ²» ʱ Ò² ºÅ ¡ Äã ¶Ô ¶ø ´ó РËù ºÍ Äú Ï Äê µÚ ÈË Ç° »ò ÁË ÒÔ Îª ÖÐ ÓÐ ÎÒ ÉÏ Ò» ÊÇ Íø »Ø Óë ÔÚ ¼° Ö® µÄ )], gbk_trad => [qw( °æ Ä W ¸ß ¿Æ ·¨ ±í ¶¼ ÆÚ ¶à ø ë àl Èç ÒÑ È ËÄ î Õf ´Ë ÁÖ ÖÁ ÎÄ × ÄÜ ê ég I ä Ö÷ ê ª K µØ Ôª · Óà ¾Í µ« ¶þ µ½ Æä ß@ áá ÓÉ µÈ í Ëû Èý ¿É ±¾ Ãû Òª í С Õß Õ¾ ÔÂ ì¶ ÈÕ ^ Õ þ ¢ Ü ²» r Ò² Ì Â¡ Äã ¦ ¶ø ´ó РËù ºÍ Äú Ï Äê µÚ ÈË Ç° »ò ÁË ÒÔ é ÖÐ ÓÐ ÎÒ ÉÏ Ò» ÊÇ ¾W »Ø Åc ÔÚ ¼° Ö® µÄ )], utf8_trad => [qw( ç å¾ å¸ é« ç§ æ³ è¡¨ é½ æ å¤ å é» é å¦ å·² å § å é¡ èªª æ¤ æ è³ æ è® è½ é é æ¥ é 主 é³ æ 並 å° å è·¯ ç¨ å°± ä½ äº å° å ¶ é å¾ ç± ç ä¾ ä» ä¸ å¯ æ¬ å è¦ é å° è ç« æ æ¼ æ¥ å è« æ å° å ä¸ æ ä¹ è é ä½ å° è 大 æ° æ å æ¨ ä¸ å¹´ 第 人 å æ äº ä»¥ çº ä¸ æ æ ä¸ ä¸ æ¯ ç¶² å è å¨ å ä¹ ç )], utf8_simp => [qw( ç ä» å¦ é« ç§ æ³ è¡¨ é½ æ å¤ å½ çµ ä¹¡ å¦ å·² å å ç±» 说 æ¤ æ è³ æ 让 è½ é é´ ä¸ å½ ä¸» é åº å¹¶ å° å è·¯ ç¨ å°± ä½ äº å° å ¶ è¿ å¾ ç± ç æ¥ ä» ä¸ å¯ æ¬ å è¦ é¡µ å° è ç« æ æ¼ æ¥ åº è¯· ä¼ å° æ° ä¸ æ¶ ä¹ å· é ä½ å¯¹ è 大 æ° æ å æ¨ ä¸ å¹´ 第 人 å æ äº ä»¥ 为 ä¸ æ æ ä¸ ä¸ æ¯ ç½ å ä¸ å¨ å ä¹ ç )], ); while (my ($k, $v) = each %map) { my @k = split(/_/, $k); foreach my $c (@{$v}) { $rev{$c}{$_} = 1 for @k; } } # }}}
1;