2016-09-30 6 views
1

Я создаю векторы TFIDF, используя Apache Mahout. Уточняю EnglishAnalyzer как часть документа tokenizing так:EnglishAnalyzer с лучшей фильтрацией остановки мира?

DocumentProcessor.tokenizeDocuments(documentsSequencePath, EnglishAnalyzer.class, tokenizedDocumentsPath, configuration); 

, который дает мне следующий вектор для документа я назвал business.txt. Я был удивлен, увидев бесполезные слова там, как have, on, i, e.g.. У одного из моих других документов больше нагрузок.

Что является самым простым способом улучшить качество терминов, которые он находит? Я знаю, что EnglishAnalyzer может быть передан список стоп-слов, но конструктор получает вызов через отражение, поэтому кажется, что я не могу этого сделать.

Должен ли я писать свой собственный анализатор? Я немного смущен тем, как составлять токенизаторы, фильтры и т. Д. Могу ли я повторно использовать EnglishAnalyzer вместе со своими собственными фильтрами? Подкласс EnglishAnalyzer не представляется возможным таким образом.

# document: tfidf-score term 
business.txt: 109 comput 
business.txt: 110 us 
business.txt: 111 innov 
business.txt: 111 profit 
business.txt: 112 market 
business.txt: 114 technolog 
business.txt: 117 revolut 
business.txt: 119 on 
business.txt: 119 platform 
business.txt: 119 strategi 
business.txt: 120 logo 
business.txt: 121 i 
business.txt: 121 pirat 
business.txt: 123 econom 
business.txt: 127 creation 
business.txt: 127 have 
business.txt: 128 peopl 
business.txt: 128 compani 
business.txt: 134 idea 
business.txt: 139 luxuri 
business.txt: 139 synergi 
business.txt: 140 disrupt 
business.txt: 140 your 
business.txt: 141 piraci 
business.txt: 145 product 
business.txt: 147 busi 
business.txt: 168 funnel 
business.txt: 176 you 
business.txt: 186 custom 
business.txt: 197 e.g 
business.txt: 301 brand 

ответ

1

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

String stopFileLocation = "\\path\\to\\my\\stopwords.txt"; 
CharArraySet stopwords = StopwordAnalyzerBase.loadStopwordSet(
     Paths.get(StopFileLocation)); 
EnglishAnalyzer analyzer = new EnglishAnalyzer(stopwords); 

Я не, сразу, посмотреть, как вы должны передать аргументы CTOR методу Mahout вы указали. Я действительно не знаю Махута. Если вы не можете, то да, вы могли бы создать собственный анализатор, скопировав EnglishAnalyzer и загрузив там свои собственные временные слова. Вот пример, который загружает пользовательский список стоп-слов из файла, а также исключение стебля (то есть, для краткости, для удаления).

public final class EnglishAnalyzerCustomStops extends StopwordAnalyzerBase { 
    private static String StopFileLocation = "\\path\\to\\my\\stopwords.txt"; 

    public EnglishAnalyzerCustomStops() throws IOException { 
    super(StopwordAnalyzerBase.loadStopwordSet(Paths.get(StopFileLocation))); 
    } 

    protected TokenStreamComponents createComponents(String fieldName) { 
    final Tokenizer source = new StandardTokenizer(); 
    TokenStream result = new StandardFilter(source); 
    result = new EnglishPossessiveFilter(result); 
    result = new LowerCaseFilter(result); 
    result = new StopFilter(result, stopwords); 
    result = new PorterStemFilter(result); 
    return new TokenStreamComponents(source, result); 
    } 

    protected TokenStream normalize(String fieldName, TokenStream in) { 
    TokenStream result = new StandardFilter(in); 
    result = new LowerCaseFilter(result); 
    return result; 
    } 
} 
+0

Спасибо, я ценю помощь в предоставлении кода, который будет выполнять эту работу. Я немного удивлен, что нет более умного способа повторного использования анализаторов без копирования и вставки. –

+1

@ Sridhar-Sarnobat - Анализаторы действительно довольно просты в создании. Вам в значительной степени просто нужно реализовать цепочку анализа в 'createComponents'. Не сомневайтесь, поэтому они отмечены как окончательные. На самом деле нет смысла расширять их, в общем, и если вы реализуете собственный анализатор, вы действительно должны * смотреть на токенизатор и фильтры, которые применяются. – femtoRgon

+0

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

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

  • Нет связанных вопросов^_^