2016-03-16 2 views
-2

У меня есть 4 категории слов, связанных с областью путешествий. Например: -Java - Как искать строку и назначать класс?

ACCOMMODATION = {"hotel","restaurant","cafe","tea shop","lodging","coffee"} 
COST = {"costly","expensive","price","inexpensive","fee","ticket"} 
AMBIANCE = {"ambiance","ambience","cool","warm","hot"} 
TRANSPORT = {"car","van","ride","walk","traffic","travel","road"} 

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

sentence1 [tab] ACCOMMODATION,COST 
sentence2 [tab] ACCOMMODATION 
sentence3 [tab] TRANSPORT 

Как я могу достичь этого наиболее эффективно?

Заранее спасибо.

+0

Что вы пробовали? StackOverflow не является службой написания кода, вы должны попытаться решить проблему и попросить о помощи, когда застрянете, покажете, что вы сделали, и какие-либо ошибки, с которыми вы столкнулись. –

ответ

1

Во-первых, вы должны разделить предложение на слова

Stream<String> words = Arrays.stream(sentence.split("\\s")); 

Создание HashSet для каждой категории:

Set<String> transportWords = new HashSet<>(Arrays.asList("car","van","ride","walk","traffic","travel","road")); 
Set<String> costWords = new HashSet<>(Arrays.asList("costly","expensive","price","inexpensive","fee","ticket")); 

и привязать их к категории:

Map<Set<String>, Category>> map = new HashMap<>(); 
map.put(transportWords, Category.TRANSPORT); 
map.put(costWords, Category.TRANSPORT); 

Затем перебирать предложение слова и проверить, принадлежат ли они к категории

Set<Category> categories = Arrays.stream(sentence.split("\\s")) 
     .map(s -> { 
      for (Set<String> keywords : map.keySet()) { 
       if (keywords.contains(s)) { 
        return Optional.of(map.get(keywords)); 
       } 
      } 
      return Optional.<Category>empty(); 
     }) 
     .filter(Optional::isPresent) 
     .map(Optional::get) 
     .collect(Collectors.toSet()); 
Смежные вопросы