Выбор только китайского, только японского и корейского записей в mysql / php - PullRequest
5 голосов
/ 06 июля 2011

Есть ли способ выбрать в mysql слова, которые только китайский, только японский и только корейский?

На английском это можно сделать:

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

или даже "грязное" решение типа:

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

Существует ли подобное решение для восточных языков / символов CJK?

Я понимаю, что в китайском и японском языках используются общие символы, поэтому существует вероятность того, что японские слова, использующие эти символы, будут приняты за китайские слова. Я думаю, что эти слова не будут отфильтрованы.

Слова хранятся в строковом поле utf-8.

Если это невозможно сделать в MySQL, можно ли это сделать в PHP?

Спасибо! :)

edit 1: Данные не включают язык, на котором находится строка, поэтому я не могу отфильтровать по другому полю. edit 2: использование API-интерфейса переводчика, такого как Bing (Google закрывает API-интерфейс переводчика) - интересная идея, но я надеялся на более быстрое решение в стиле регулярных выражений.

Ответы [ 4 ]

3 голосов
/ 06 июля 2011

Поиск диапазона символов UTF-8 напрямую не поддерживается в регулярном выражении MySQL.См. Справочник mySQL для regexp , где указано:

Предупреждение Операторы REGEXP и RLIKE работают побайтово, поэтому они не являются многобайтовыми и могут привести к неожиданным результатам.результаты с многобайтовыми наборами символов.

К счастью, в PHP вы можете создать такое регулярное выражение, например, с

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

(обратите внимание на u в конце регулярного выражения),Поэтому вам нужно найти подходящие диапазоны для ваших разных языков.Использование кодовых кодов Unicode позволит вам выбрать соответствующий скрипт для языка (хотя не непосредственно для самого языка).

1 голос
/ 06 июля 2011

Вы не можете сделать это из одного набора символов - особенно в современную эпоху, когда азиатские тексты часто «латинизированы», то есть написаны римским шрифтом, который говорит, что если вы просто хотите выбрать тексты, которые поверхностно«азиатский», есть способы сделать это в зависимости от того, насколько сложным вы хотите быть и насколько точным вы должны быть.

Но, честно говоря, я предлагаю вам добавить новый "language »в вашу базу данных и убедитесь, что она заполнена правильно.

Тем не менее, вот несколько полезных ссылок, которые могут вас заинтересовать:

Последнее относительно сложно реализовать, но дает гораздо лучший результат.

В качестве альтернативы, я считаю, что Google имеет(онлайн) API, который позволит вам обнаруживать и переводить язык.

Интересная статья, которая должна продемонстрировать бесполезность этого упражнения:

Наконец, вы спрашиваете:

Если это невозможно сделать в MySQL - как это можно сделать в PHP?

Скорее всего, это будет гораздо проще сделать в PHP, потому что вы в большей степени сможете выполнять математический анализ рассматриваемой языковой строки, хотя, возможно, вы захотите передать результаты обратно в базу данных, как неуклюжий способ кэширования результатов.по соображениям производительности.

0 голосов
/ 28 февраля 2012

Корейский в основном использует свой собственный алфавит, называемый хангыль.Время от времени появляются некоторые символы Хань.

Японец использует три системы письма вместе.Из них катакана и хирагана являются уникальными для японского языка и, таким образом, почти никогда не используются в корейском или китайском тексте.

Японский и китайский оба используют символы Хан, хотя это означает, что одинаковые диапазоны Unicode, так что нетпростой способ дифференцировать их, основываясь только на диапазонах символов!

Хотя есть некоторые эвристики.

В материковом Китае используются упрощенные символы, многие из которых уникальны и поэтому вряд ли когда-либо используются в японском или корейскомтекст.

Япония также упростила небольшое количество общих символов, многие из которых уникальны и, следовательно, вряд ли когда-либо будут использоваться в китайском или корейском тексте.

Но, безусловно, есть много случаев, когдаодинаковые строки символов действительны как для японского, так и для китайского языков, особенно в случае очень коротких строк.

Один из методов, который будет работать со всем текстом, состоит в просмотре групп символов.Это означает, что n-грамм и, вероятно, марковские модели, как Арафангион упоминает в своем ответе.Но имейте в виду, что даже в случае очень коротких строк это небезопасно!

И, конечно, ничего из этого не будет реализовано в любом программном обеспечении базы данных, поэтому вам придется делать это на языке программирования.

0 голосов
/ 06 июля 2011

вы можете рассмотреть другую структуру данных, которая содержит слова и или символы, и язык, с которым вы хотите связать их.

'нормальные' восточные символы ascii будут ассоциироваться с гораздо большим количеством языков, чем, например, только английский, точно так же, как другие символы могут ассоциироваться не только с китайским.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...