Разбить доменное имя на составные слова (если это возможно)? - PullRequest
3 голосов
/ 28 июля 2010

Я хочу разбить доменное имя на составные слова и цифры, например,

iamadomain11.com = ['i', 'am', 'a', 'domain', '11']

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

Ответы [ 3 ]

3 голосов
/ 04 августа 2010

Это на самом деле решается в книге О'Рейли Медиа, Красивые данные . В главе 14 «Корпоративные данные на естественном языке» он создает сплиттер, который выполняет в Python именно то, что вам нужно, используя гигантский свободно доступный набор данных о частоте токенов.

1 голос
/ 28 июля 2010

Это звучит похоже на проблему токенизации китайского языка, где между словами нет пробелов. Этот параграф взят из «Введение в поиск информации» Мэннинга, Рагхавана и Шютце, доступного онлайн здесь :

Это явление достигает предела с основными восточноазиатскими языками (например, Китайский, японский, корейский и тайский), где текст написан без каких-либо пробелы между словами. [...] Один подход здесь, чтобы выполнить сегментацию слов в качестве предшествующей лингвистической обработки. Методы сегментации слова варьируются от имея большой словарный запас и принимая самый длинный словарный запас с некоторыми эвристика для неизвестных слов в использование последовательности машинного обучения модели, такие как скрытые марковские модели или условные случайные поля, обученные над сегментированными вручную словами

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

1 голос
/ 28 июля 2010

Это забавная проблема! Сначала вам понадобится словарь. По соображениям производительности, храните это в хэш-наборе (возможно, можете использовать тип словаря в Python). Затем вы можете перебирать каждую возможную строку («i», «ia», «iam», ... «n11», «1», «11», «1») и проверять совпадения в словаре. Затем необходимо выполнить итерации по этим совпадениям, пока не будет получен непрерывный набор без перекрытий.

Это было бы быстро и грязно. Возможно, есть более быстрые способы сделать это.

...