Java - Получение массива существительных с Wordnet и JWI
У меня довольно простой вопрос относительно WordNet и MIT JWI (Java API для доступа к WordNet): я читаю файл в массив строк, которые я разбил на слова. Как я могу получить отдельный массив строк, содержащий только существительные, используя getPOS()? Спасибо!
Пример того, что я пробовал:
общедоступный тест {
public static void main(String[] args) {
String sentence1 = "The cat ate the fish";
String[] s1Split = sentence1.split(" ");
String wnhome = "C:/Program Files/WordNet/2.1";
String path = wnhome + File.separator + "dict";
URL url = new URL("file", null , path);
IDictionary dict = new Dictionary(url);
dict.open();
for (int i = 0; i <s1.length; i++) {
//this is where I got confused, wanted to use something like:
//Word w = dict.getIndexWord(s1[i], ..) but I need a POS argument,
//and I can't find another suitable method
//if w.getPOS() is a noun I would add it to a separate vector
}
}
}
РЕДАКТИРОВАТЬ: Просто подумал о другом - было бы надежно использовать что-то вроде w = dict.getIndexWord(s1[i], POS.NOUN)
, а если существительного не существует, то w будет нулевым? Это стоит попробовать?
РЕДАКТИРОВАТЬ 2: Таким образом, мой вопрос atm будет, если есть какой-нибудь способ, которым я могу преобразовать строку (слово) в объект Wordnet, чтобы я мог использовать getPOS() на нем?
2 ответа
Ваш подход не будет работать так же хорошо, как если бы вы использовали другую библиотеку - WordNet разработан как "словарь / тезаурус" для стероидов, а не как парсер. Stanford Parser - хорошее место для поиска альтернативы.
Тем не менее, вы можете выполнить поиск для каждого слова, но если есть слова, которые являются существительными и, скажем, глаголами, вы не сможете различить, потому что вы не учитываете синтаксис.
Это должно помочь вам начать (см. Пример внизу). Сделайте поиск существительного, если оно не вернется, откажитесь от него.
Для JWNL это работает следующим образом, не знаю, если это то же самое.
Если я понял, что ваша проблема - получить POS (часть речевых тегов). Для этого вы должны использовать другой инструмент, такой как Stanford Pos Tagger. Однако таким образом вы получаете строку для каждой строки слова, следовательно, вы должны конвертировать из POS в строковом формате в POS в классе POS JWNL.