удалить все не-ASCII из строки - PullRequest
1 голос
/ 26 февраля 2012

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

Есть ли какой-либо удобный способ (кроме написания собственногофункции с оператором множественной замены) для автоматической замены всех национальных символов на основные буквы?Например, я хочу заменить æ на ae , а на a , ę на е и тд.

Если невозможно подготовить универсальную функцию, есть ли какая-либо готовая функция в используемых в настоящее время языках программирования, которая удалит такие символы, просто ограничив разрешенные символы только символами из стандартного латинского алфавита?

Ответы [ 5 ]

2 голосов
/ 27 февраля 2012

Существует unidecode , который доступен для нескольких языков (perl, python, java).Ранее я писал об этом в этом ответе .

>>> from unidecode import unidecode
>>> unidecode(u"İstanbul")
'Istanbul'
>>> unidecode(u"\u5317\u4EB0")
'Bei Jing '
1 голос
/ 26 февраля 2012

Транслитерация - это слово, которое вы ищете:)

В php это достигается с помощью iconv: http://php.net/manual/en/function.iconv.php

Как уже говорили другие, возможно, лучше по возможности хранить все в Unicode (utf8 или 16).

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

Если вы вводите Unicode, вы можете применить Unicode normalisation NKFD, чтобы приблизить то, что вы хотите. Python имеет это встроенный . После нормализации вы можете удалить акценты, которые будут отделены от букв, которым они принадлежат.

>>> import unicodedata
>>> s = u"äçéì"  # u"" makes a Unicode string in Python 2.x
>>> unicodedata.normalize("NFKD", s).encode("ascii", errors="ignore")
'acei'

Это не сработает для æ, однако.

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

В PHP вы можете сканировать файлы в каталоге:

<?php
$dir = '';
    if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if ($file[0] == '.' || is_dir($dir.'/'.$file)) {
            continue;
        }
//functions here
    }
    closedir($handle);
}
?>

Затем переименовать их все с этим регулярным выражением:

$newname = ereg_replace("[^A-Za-z0-9]", "", $oldname);

Вы должны установить $ oldname на имя файлакаждый файл в каталоге, и иметь его там, где //functions, который будет проходить через каждый файл в каталоге и переименовывать его в соответствии с регулярным выражением.

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

Я не знаю, какой язык вы используете, но в php вы можете сделать

$text = preg_replace("/[^a-zA-Z0-9]+/", "", $text);

, вы можете изменить reg exp, чтобы разрешить больше / меньше символов.

...