Сравнение и извлечение похожих строк из 2 массивов в java, двойные слова не сравниваются - PullRequest
0 голосов
/ 21 апреля 2020

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

Я сравниваю массивы и извлекаю сходства с помощью HashSet.

final String[] abc = nlp_text.split(" ");
final String[] xyz = getResources().getStringArray(R.array.xyz);

    final HashSet<String> set = new HashSet<>();
    for(String a : abc) set.add(a.toLowerCase());
    final HashSet<String> set1 = new HashSet<>();
    for(String a : xyz) set1.add(a.toLowerCase());
    set.retainAll(set1);
    String[] pqr= {};
    pqr = set.toArray(pqr);

Это работает для строк из одного слова, но не работает для строк из двух слов. Например, строки «Джон» и «Доу» будут распознаваться отдельно, а «Джон Доу» - нет.

есть идеи почему?

ОБНОВЛЕНИЕ: как мне было указано, это проблема nlp_text.split (""). Однако, когда я попытался разбить его на «,», а затем на все остальные метки, он не распознал ни одну из строк. возврат будет просто пустым ... помогите, пожалуйста!

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

nlp_text.split(" "); разделяет слова, поэтому ваша строка «John Doe» становится двумя отдельными строками «John» и «Doe». Я рекомендую, например, разделить nlp_text запятыми, чтобы два ваших слова Strings считались одной строкой.

0 голосов
/ 21 апреля 2020

Когда вы определяете ab c:

final String[] abc = nlp_text.split(" ");
final HashSet<String> set = new HashSet<>();
for(String a : abc) set.add(a.toLowerCase());

, вы делаете разделение на "", поэтому у "ab c" будет только одна строка слов, поэтому "set" - это только будет одна строка слов, поэтому позже, когда вы сделаете сохранение.

set.retainAll(set1);

Это означает, что «набор» может сохранить только одну строку слов, потому что он имеет только одну строку слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...