Извлекать слова из текстового файла - PullRequest
10 голосов
/ 10 ноября 2008

Допустим, у вас есть такой текстовый файл: http://www.gutenberg.org/files/17921/17921-8.txt

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

Я работаю на Java. Спасибо

Ответы [ 5 ]

17 голосов
/ 10 ноября 2008

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

String input = "Input text, with words, punctuation, etc. Well, it's rather short.";
Pattern p = Pattern.compile("[\\w']+");
Matcher m = p.matcher(input);

while ( m.find() ) {
    System.out.println(input.substring(m.start(), m.end()));
}

Шаблон [\w']+ соответствует всем символам слова и апострофу несколько раз. Пример строки будет напечатан слово за словом. Ознакомьтесь с документацией *1005* к классу Java Pattern, чтобы узнать больше.

3 голосов
/ 10 августа 2012

Вот хороший подход к вашей проблеме: Эта функция получает ваш текст в качестве входных данных и возвращает массив всех слов внутри данного текста

private ArrayList<String> get_Words(String SInput){

    StringBuilder stringBuffer = new StringBuilder(SInput);
    ArrayList<String> all_Words_List = new ArrayList<String>();

    String SWord = "";
    for(int i=0; i<stringBuffer.length(); i++){
        Character charAt = stringBuffer.charAt(i);
        if(Character.isAlphabetic(charAt) || Character.isDigit(charAt)){
            SWord = SWord + charAt;
        }
        else{
            if(!SWord.isEmpty()) all_Words_List.add(new String(SWord));
            SWord = "";
        }

    }

    return all_Words_List;

}
3 голосов
/ 10 ноября 2008

Псевдокод будет выглядеть так:

create words, a list of words, by splitting the input by whitespace
for every word, strip out whitespace and punctuation on the left and the right

Код Python будет выглядеть примерно так:

words = input.split()
words = [word.strip(PUNCTUATION) for word in words]

где

PUNCTUATION = ",. \n\t\\\"'][#*:"

или любые другие символы, которые вы хотите удалить.

Я считаю, что Java имеет эквивалентные функции в классе String: String .split ().


Вывод этого кода на текст, который вы указали в ссылке:

>>> print words[:100]
['Project', "Gutenberg's", 'Manual', 'of', 'Surgery', 'by', 'Alexis', 
'Thomson', 'and', 'Alexander', 'Miles', 'This', 'eBook', 'is', 'for', 
'the', 'use', 'of', 'anyone', 'anywhere', 'at', 'no', 'cost', 'and', 
'with', 'almost', 'no', 'restrictions', 'whatsoever', 'You', 'may', 
'copy', 'it', 'give', 'it', 'away', 'or', 're-use', 'it', 'under', 
... etc etc.
1 голос
/ 10 ноября 2008

По сути, вы хотите соответствовать

([A-Za-Z]) + ( '([A-Za-Z]) *)

право

0 голосов
/ 10 ноября 2008

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

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