Категоризация слов и значений категорий

== сравнивает ссылки на объекты в Java и не является исключением для объектов String.

Для сравнения фактического содержимого объектов (в том числе String) необходимо использовать equals.

Если сравнение двух объектов String с использованием == оказывается true, это связано с тем, что объекты String были интернированы, а виртуальная машина Java имеет несколько ссылки указывают на тот же экземпляр String. Не следует ожидать сравнения одного объекта String, содержащего то же содержимое, что и другой объект String, используя == для оценки как true.

13
задан hippietrail 25 October 2012 в 02:50
поделиться

20 ответов

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

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

17
ответ дан 1 December 2019 в 17:45
поделиться

Поскольку вам не нужно заниматься этим вопросом, когда вы решаете эту «загадку», я думаю, что это не должно быть легко. Тем не менее, я бы сделал что-то вроде этого (сказано очень упрощенно)

Создайте нейронную сеть, в которую вы вносите некоторый вклад ((e) книга, некоторые (e) книги) => Google не нужен

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

0
ответ дан 1 December 2019 в 17:45
поделиться

Мой наивный подход:

  1. Создайте огромный текстовый файл, например этот ( прочтите статью для вдохновения )
  2. Для каждого слова, просканируйте текст и всякий раз, когда вы найдете это слово, подсчитайте «категории», которые появляются в N (максимум, радио) позициях слева и справа от него.
  3. Слово, вероятно, принадлежит к категории с наибольшим счетчиком.
0
ответ дан 1 December 2019 в 17:45
поделиться

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

0
ответ дан 1 December 2019 в 17:45
поделиться

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

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

Будьте изобретательны. Помимо Google есть и другие данные.

0
ответ дан 1 December 2019 в 17:45
поделиться

Счистите delicious.com и найдите каждое слово, просматривая количество коллективных тегов и т. Д.

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

Информация находится в тегах.

0
ответ дан 1 December 2019 в 17:45
поделиться

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

0
ответ дан 1 December 2019 в 17:45
поделиться

Это возможно динамически генерировать тег JavaScript и добавлять его в документ HTML из другого кода JavaScript. Это загрузит целевой файл JavaScript. Я бы сделал несколько проходов. Сначала запросите 100 слов в 2-3 поисковых системах, возьмите первые y результирующих статей (y - порог для экспериментов. 5 - хорошее начало, я думаю) и просканируйте текст. В частности, я буду искать 10 категорий. Если категория появляется более чем x раз (x снова является порогом, с которым вам нужно поэкспериментировать), это совпадение. Основываясь на этом пороговом значении x (то есть, сколько раз категория появляется в тексте) и сколько раз из y верхних страниц она появляется, вы можете назначить вес для пары слово-категория. для большей точности вы можете затем выполнить еще один проход с теми поисковыми системами, которые не относятся к Google, с парой слово-категория (с отношением И) и применить количество полученных страниц к весу этой пары. Они просто предполагают, что пара слово-категория с наивысшим весом является правильной (при условии, что у вас даже будет более одного варианта). Вы также можете назначить слово нескольким категориям, если веса достаточно близки (возможно, порог z). Исходя из этого, вы можете ввести любое количество слов и любое количество категорий. И ты выиграешь свой вызов. Я также считаю, что этот метод хорош для оценки веса потенциальных AdWords в рекламе. но это уже другая тема ....

Удачи

Харел

0
ответ дан 1 December 2019 в 17:45
поделиться

Моей первой мыслью было использование внешних данных. Напишите программу, которая выполняет поиск в Google по каждому слову и выбирает «категорию», которая отображается первой / высшей в результатах поиска :)

Это можно было бы считать мошенничеством.

0
ответ дан 1 December 2019 в 17:45
поделиться

Да, я бы выбрал подход Wordnet. Проверьте это руководство по Измерению семантического сходства на основе WordNet . Вы можете запросить Wordnet онлайн на princeton.edu (погуглить), так что будет относительно легко написать решение вашей проблемы. Надеюсь, это поможет,

X.

1
ответ дан 1 December 2019 в 17:45
поделиться

Google запрещен, но у них есть почти идеальное решение - Google Sets .

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

1
ответ дан 1 December 2019 в 17:45
поделиться

Уволить этого учителя.

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

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

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

1
ответ дан 1 December 2019 в 17:45
поделиться

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

Возможно, что-то можно было бы сделать с базой данных тезауруса и поиском минимальных расстояний между 'словами слова и слова категории?

1
ответ дан 1 December 2019 в 17:45
поделиться

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

Создайте набор категоризации

РЕДАКТИРОВАТЬ:

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

2
ответ дан 1 December 2019 в 17:45
поделиться

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

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

Другой , немного более нестандартным вариантом было бы использование краудсорсинга, примите во внимание следующее:

  1. Начните с более или менее случайного назначения пар имя-значение.
  2. Выведите результаты.
3
ответ дан 1 December 2019 в 17:45
поделиться

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

Без этого проблему невозможно решить. Это не проблема алгоритма, это проблема ИИ. Но даже ИИ (а также естественный интеллект, если на то пошло) нуждается в каком-то вкладе, чтобы учиться.

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

Ключевой вопрос здесь: кто решает, что такое «правильная» классификация? На чем основано это решение? Как можно воспроизвести это решение программно и какие входные данные для этого потребуются?

2
ответ дан 1 December 2019 в 17:45
поделиться

Возможно вы все слишком усложняете задачу.

Очевидно, вам нужна какая-то внешняя ссылка для ранжирования вероятности того, что X находится в категории Y. Возможно ли, что он проверяет ваше "нестандартное" мышление и что ВЫ могли бы быть внешней ссылкой? То есть,

8
ответ дан 1 December 2019 в 17:45
поделиться

Действительно плохой ответ (демонстрирует отсутствие «понимания») - но в качестве безумного укола вы можете нажать google (через код) для (например) «+ Рыбалка + Спорт», «+ Рыбалка + Кулинария »и т. Д. (То есть перекрестное соединение каждого слова и категории) - и пусть Google побеждает! т.е. выбирается комбинация с наибольшим количеством "совпадений" ...

Например (сначала результаты):

weather: fish
sport: ball
weather: hat
fashion: trousers
weather: snowball
weather: tornado

С кодом (TODO: добавить потоки ;-p):

static void Main() {
    string[] words = { "fish", "ball", "hat", "trousers", "snowball","tornado" };
    string[] categories = { "sport", "fashion", "weather" };

    using(WebClient client = new WebClient()){
        foreach(string word in words) {
            var bestCategory = categories.OrderByDescending(
                cat => Rank(client, word, cat)).First();
            Console.WriteLine("{0}: {1}", bestCategory, word);
        }
    }
}

static int Rank(WebClient client, string word, string category) {
    string s = client.DownloadString("http://www.google.com/search?q=%2B" +
        Uri.EscapeDataString(word) + "+%2B" +
        Uri.EscapeDataString(category));
    var match = Regex.Match(s, @"of about \<b\>([0-9,]+)\</b\>");
    int rank = match.Success ? int.Parse(match.Groups[1].Value, NumberStyles.Any) : 0;
    Debug.WriteLine(string.Format("\t{0} / {1} : {2}", word, category, rank));
    return rank;
}
11
ответ дан 1 December 2019 в 17:45
поделиться

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

0
ответ дан 1 December 2019 в 17:45
поделиться

Интересная задача. Вы смотрите на классификацию слов. Хотя вы можете изучить и использовать традиционные методы поиска информации, такие как LSA и категоризация на их основе - я не уверен, что это ваше намерение (если это так, то сделайте это во что бы то ни стало! :)

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

# S: (n) **fishing**, sportfishing (the act of someone who fishes as a diversion)
* direct hypernym / inherited hypernym / sister term
      o S: (n) **outdoor sport, field sport** (a sport that is played outdoors)
      + direct hypernym / inherited hypernym / sister term
            # S: (n) **sport**, athletics 
            (an active diversion requiring physical exertion and competition) 

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

Теперь, если вы уловили дрейф - можно использовать это соотношение для вычисления вероятности отнесения «рыбной ловли» к «спорту» - скажем, на основе линейного расстояния цепочки слов или количества вхождений, и другие. (должно быть тривиально найти ресурсы о том, как построить меры сходства с использованием wordnet. когда профессор говорит «не использовать Google», я предполагаю, что он имеет в виду программно, а не как средство получения информации для чтения!)

Как для C # с wordnet - как насчет http://opensource.ebswift.com/WordNet.Net/

1
ответ дан 1 December 2019 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: