def main() -> None: """Точка входа в приложение.""" corpus_root = Path('corpus') # Настроим логирование результатов global _logger setup_logger(_logger, corpus_root / 'collocations.log') # Загрузим стоп-слова nltk.download('stopwords', '.env/share/nltk_data') stop_words = set(stopwords.words('russian')) # Импортируем корпус tags_root = corpus_root / 'pos_tagging' reader = ConllCorpusReader( str(tags_root), [f.name for f in tags_root.glob('*.tags')], columntypes=['words', 'ignore', 'ignore', 'ignore', 'pos'], separator='\t') _logger.info('Документов: %d', len(reader.fileids())) _logger.info('Токенов в первом документе (%s): %d', reader.fileids()[0], len(reader.words(reader.fileids()[0]))) _logger.info('Загружаем предложения') sentences = reader.sents() # Строим таблицы сопряжённости для всех слов в корпусе _logger.info('Считаем таблицу сопряжённости по всем словам') bigram_finder = BigramCollocationFinder.from_documents( [w.lower() for w in sent] for sent in tqdm(sentences)) _logger.info('Всего биграм: %d', bigram_finder.N) print_samples(bigram_finder) # А теперь отфильтруем по частоте и удалим пунктуацию, стоп-слова _logger.info( 'Отфильтруем пунктуацию, стоп-слова и установим предел по частоте') bigram_finder.apply_freq_filter(5) bigram_finder.apply_word_filter(lambda w: len(w) < 3 or w in stop_words) _logger.info('Всего биграм: %d', bigram_finder.N) print_samples(bigram_finder)
def words(self, fileids=None, categories=None): return ConllCorpusReader.words(self, self._resolve(fileids, categories))