Как определить, какие символы Юникода являются буквами (словами), а не знаками препинания? - PullRequest
3 голосов
/ 12 февраля 2010

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

Например, в вышеприведенном предложении «I», «хочу» и «i» и «e» являются словами в этом отношении, а пробелы «.» и запятая не являются.

Сложность в том, что я хочу иметь возможность читать любые сценарии, основанные на Юникоде. Например, немецкое слово "schön" - это одно слово. Но как насчет греческого, арабского или японского?

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

Мне это нужно для Mac OS X, Windows и Linux. Я напишу приложение на C, поэтому оно должно быть либо библиотекой ОС, либо полным решением кода / данных, которое я мог бы перевести на C.

Я знаю, что Mac OS (Какао) предлагает функции для этой цели, но я не уверен, существуют ли похожие решения для Win и Linux (возможно, на основе gtk?).

Кроме того, я мог бы написать свой собственный код, если бы у меня были полные таблицы.

Я нашел графики Unicode (http://unicode.org/charts/index.html#scripts), но это не входит в одну удобную форму, которую я мог бы использовать в программировании.

Так, может кто-нибудь сказать мне, есть ли функции для Windows и Linux для этой цели, или где я могу найти полную таблицу / список символов слова в юникоде?

Ответы [ 4 ]

4 голосов
/ 12 февраля 2010

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

1 голос
/ 12 февраля 2010

Если вы вообще знакомы с Python, Natural Language Toolkit предоставляет чанкеры / лексические инструменты, которые делают это для разных языков. Я бы притворился умным здесь и скажу вам больше, но все, что я знаю, из этой книги , которую я очень рекомендую. Я понимаю, что вы можете написать техническое решение с помощью регулярного выражения, которое поможет вам на 80% добраться туда, куда вы хотите, но зачем изобретать велосипед?

0 голосов
/ 23 февраля 2017

В Java есть static int java.lang.Character.getType(int codePoint), который можно сравнить с константами, предоставленными в том же классе, например:

switch(Character.getType(codePoint)) {
    case Character.UPPERCASE_LETTER:
    case Character.LOWERCASE_LETTER:
    case Character.TITLECASE_LETTER:
    case Character.MODIFIER_LETTER:
    case Character.OTHER_LETTER:
        // you found a letter
    break;
    case Character.NON_SPACING_MARK:
        // you found a combining diacritical mark
        // see: https://en.wikipedia.org/wiki/Combining_character
    break;
    default:
        // you found other symbols
    break;
}
0 голосов
/ 12 февраля 2010

время выполнения c имеет

  • ispunct() - знак пунктуации
  • isctrl() - управляющий символ.
...