2016-08-22 4 views
2

Я ищу структуру данных для хранения синонимов. Я хотел бы сохранить синонимы в ведрах, таких как «Северная Америка», «США», «Соединенные Штаты».структура данных синонимов для поиска

Материалы для поиска могут быть помечены любыми «Северной Америкой», «США», «США».

For example, 
Content_1 is tagged "USA" 
Content_2 is tagged "North America" 
Content_3 is tagged "United States" 

Если пользователь ищет «США», результат поиска должен возвращать все три содержания не только Content_1. Чтобы получить это, я должен получить все синонимы США, а затем выполнить поиск.

Как хранить синонимы, где я ищу один из синонимов и получить все остальные?

Один из способов сделать это через HashMap, как показано ниже

USA -> North America,United States 
United States -> USA, North America 
North America -> USA,United States 

Это не выглядит, что хорошо. Пожалуйста, предложите хорошую структуру данных для хранения синонимов.

спасибо.

+0

Что случилось с хашмапом? Что вы подразумеваете под «хорошим»? Быстрый доступ? – macco

+1

Доступ - O (1). Но построение структуры данных выглядит как создание повторяющихся элементов. Лучшая структура данных, в которой хранится только одна запись. – user3222372

+0

Отличный вопрос. Это заставило меня подумать, какие поисковые системы, как Google, могут использовать. –

ответ

1

Доступ к O (1). Но построение структуры данных выглядит как генерирование дублирующих элементов . Лучшая структура данных, в которой хранится только одна запись: .

Вы можете использовать две структуры данных. Один для их хранения и один для поиска. Один вектор векторов, который содержит все синонимы слова. И хэш-карта, указывающая на контейнер со всеми синонимами для поиска O (1).

Таким образом, вы бы хранить синонимы в структуре данных, как это (список списков строк):

{{"USA","North America","United States"},{"Tiny","Small"},{"Great","Good"}} 

И тогда вы бы HashMap, так что если вы ищете " США "вы получите первый список. Если вы ищете «Малый», вы получите второй список.

"USA"->{"USA","North America","United States"} 
"Small"->{"Small","Tiny"} 

Данные в HashMap только ссылка на список синонимов, которые вы сохранили в другой структуре данных.

+1

Не получил ваше решение. Можете ли вы, пожалуйста, продумать, используя пример, который я взял? – user3222372

+0

Затем вы должны сделать каждое слово в качестве ключа, и синонимы становятся излишними во многих значениях, создавая несколько записей, которые не делают желаемого решения. –

+0

Это не списки. Они наборы! – lostsoul29

0

Составьте тип данных Synonym который содержит Set<String> содержащий все синонимы для слов (в вашем случае "Северная Америка", "США", "США"). Затем сопоставьте с Map<String, Synonym> все ваши слова, соответствующие Synonym.

Смежные вопросы