2011-07-06 4 views
5

중국어 만의 일본어와 한국어 만 사용할 수있는 mysql 단어를 선택하는 방법이 있습니까? 심지어mysql/php에서 중국어 만, 일본어 만 및 한국어 만 레코드 선택

SELECT * FROM table WHERE field REGEXP '[a-zA-Z0-9]'

나 같은 "더러운"솔루션 : 영어

가 수행 할 수

SELECT * FROM table WHERE field > "0" AND field <"ZZZZZZZZ"

동부 언어/CJK 문자에 대한 비슷한 솔루션이 있습니까 ?

중국어와 일본어는 공유 문자이므로이 문자를 사용하는 일본어 단어가 중국어 단어로 오인 될 가능성이 있습니다. 나는 그 단어들이 걸러지지 않을 것이라고 생각한다.

단어는 utf-8 문자열 필드에 저장됩니다.

mysql에서이 작업을 수행 할 수 없다면 PHP로 수행 할 수 있습니까?

감사합니다. :)

편집 1 : 데이터가 어떤 언어로 포함되어 있지 않으므로 문자열이 다른 필드로 필터링 할 수 없습니다. 2 : 번역기 API를 사용하여 bing (google이 번역기 API를 닫음)과 같은 재미있는 아이디어가 있지만 더 빠른 정규식 솔루션이 필요했습니다.

+1

1) 문자열을 원시 코드 포인트 (예 : UCS-4)로 변환하십시오. 2) 각 캐릭터가 원하는 범위 내에 있는지 확인하십시오. CJK 글리프의 경우 운이 좋을 수 있으며 실제로는 하나의 인접 범위 (또는 소수의 소수)에서만 사용할 수 있습니다. –

+0

이것은 유사하지만 동일하지는 않습니다. http://stackoverflow.com/questions/1441562/detect-language-from-string-in-php – Arafangion

답변

3

UTF-8 문자 범위를 검색하는 것은 MySQL regexp에서 직접 지원되지 않습니다. 이 상태 regexp의 MySQL을 참조하십시오 :

를 바이트 현명한 방식으로 정규 표현식과 RLIKE 사업자 작업 경고를, 그래서 그들은 하지 멀티 바이트 안전하고 멀티 바이트 와 예기치 않은 결과가 발생할 수 있습니다 문자 집합.

PHP에서는 다행히도 이와 같은 regexp를 만들 수 있습니다.

/[\x{1234}-\x{5678}]*/u 

(정규식 끝 부분에 u이 있음). 따라서 다른 언어에 적합한 범위를 찾아야합니다. unicode code charts을 사용하면 해당 언어에 해당하는 스크립트을 선택할 수 있습니다 (직접 언어 자체는 아니지만).

+0

정규 표현식만으로는 사용 된 문자가 다음과 같이 현저하게 비효율적 일 수 있습니다. 굉장히 유사한. 최소한 일종의 통계 자료를 사용해야 할 것 같습니다. – Arafangion

+0

@Arafangion - 한글 문자는 한국어 전용 문자와 가타카나 문자 만 일본어로 사용됩니다. 한자가 2 차 수표가 필요할 수도있는 곳이라면 잠재적 인 모호함 만 있습니다. – borrible

+0

한자는 어떻게됩니까? 로마자를 씌운 일본어 텍스트? – Arafangion

0

단어 및 문자가 포함 된 다른 데이터 구조와이를 연관시키려는 언어를 고려해보십시오.

'정상적인'동부 아스키 문자는 예를 들어 다른 문자가 중국어 이외의 다른 문자와 연결될 수있는 것처럼 영어 이외의 많은 언어와 연결됩니다.

1

문자 집합만으로는이 작업을 수행 할 수 없습니다. 특히 아시아 언어 텍스트가 빈번하게 "로마자 처리되는"즉 로마어 스크립트로 작성된 현대 시대에는 텍스트를 선택하기 만하면됩니다. 표면적으로는 '아시아 적'인데, 당신이 얼마나 복잡하고 원하는 정확성에 따라 그렇게하는 방법이 있습니다.

솔직히 나는 새 "언어"필드를 데이터베이스에 추가하고 정확하게 채워지는 것이 좋습니다. 말했다

, 여기 당신이에 관심이있을 수있는 몇 가지 유용한 링크는 다음과 같습니다

후자는 구현하기가 상대적으로 복잡하지만 훨씬 더 나은 결과를 얻을 수 있습니다.

Google은 (온라인) API를 사용하여 사용자가 검색하고 언어를 번역 할 수 있다고 믿습니다. 이 훈련의 무용을 증명해야

흥미로운 종이가 마지막으로

, 당신은 질문 :

이이 MySQL의에서 할 수 캔트 - 방법 PHP로 할 수 있습니까?

당신은 아마 같은 데이터베이스에 결과를 다시 공급하는 것이 좋습니다 있지만 가능성, 문제의 언어 문자열을 수학적 분석을 수행 할 더 할 수 있기 때문에 PHP에서이 작업을 수행하는 것이 훨씬 쉽게 될 것입니다 성능상의 이유로 결과를 캐싱하는 kludgy 방법.

0

한국어는 주로 한글이라는 자체 알파벳을 사용합니다. 간혹 일부 한자가 던져 질 것입니다.

일본어는 3 가지 필기 시스템을 사용합니다. 이 중 가타카나와 히라가나는 일본어에 고유하므로 한국어 또는 중국어 텍스트로는 거의 사용되지 않습니다.

일본어와 중국어 모두 한글 문자를 사용하지만 동일한 유니 코드 범위를 의미하므로 문자 범위만으로 쉽게 구분할 수있는 방법은 없습니다.

일부 추론이 있습니다.

중국 본토는 간결한 문자를 사용하며 대부분이 고유하며 일본어 또는 한국어 텍스트에서는 거의 사용되지 않습니다.

일본도 소수의 공통 문자를 단순화했습니다. 대부분의 문자는 고유하므로 중국어 또는 한국어 텍스트에서는 거의 사용되지 않습니다.

그러나 특히 짧은 문자열의 경우 일본어와 중국어 모두에서 동일한 문자열이 유효 할 수 있습니다.

모든 텍스트에서 작동하는 한 가지 방법은 문자 그룹을 보는 것입니다. 이것은 Arafangion이 대답에 언급 한 것처럼 n-gram과 아마도 Markov 모델을 의미합니다. 하지만 아주 짧은 문자열의 경우에도 이것이 절대 안전한 것은 아닙니다.

물론 모든 데이터베이스 소프트웨어에서 구현되지 않으므로 프로그래밍 언어로 처리해야합니다.