Как пометить текст на французском языке и разбить его на фрагменты с помощью NLTK и Python?

У меня есть более 30 000 статей на французском языке в файле JSON. Я хотел бы провести некоторый анализ текста как по отдельным статьям, так и по набору в целом. Прежде чем идти дальше, я начну с простых целей:

  • Определить важные сущности (людей, места, концепции)
  • Найти существенные изменения в важности (~= частоте) этих сущностей с течением времени (используя последовательность статей число в качестве прокси для времени)

Шаги, которые я предпринял до сих пор:

  1. Импорт данных в список Python:

    import json
    json_articles=open('файл_статьи.json')
    список статей = json.load(json_articles)
    
  2. Выбрали одну статью для тестирования и объединили основной текст в одну строку:

    txt = ' '.join(data[10000]['body'])
    
  3. Загрузил токенизатор предложений на французском языке и разделил строку на список предложений:

    nltk.data.load('tokenizers/punkt/french.pickle')
    tokens = [french_tokenizer.tokenize(s) для s в предложениях]
    
  4. Попытка разбить предложения на слова с помощью WhiteSpaceTokenizer:

    from nltk.tokenize import WhitespaceTokenizer
    wst = WhitespaceTokenizer()
    токены = [wst.tokenize(s) для s в предложениях]
    

Здесь я застрял по следующим причинам:

  • NLTK не имеет встроенного токенизатора, который может разбивать французский на слова.Пустое пространство не работает, в частности, из-за того, что оно не будет правильно разделять апострофы.
  • Даже если бы я использовал регулярные выражения для разделения на отдельные слова, у меня нет французских тегов PoS (частей речи), которые я мог бы использовать для маркировки этих слов, и нет способа разбить их на логические единицы значения

Для английского языка я мог бы пометить текст и разбить его на фрагменты следующим образом:

    tagged = [nltk.pos_tag(token) for token in tokens]
    chunks = nltk.batch_ne_chunk(tagged)

Мои основные варианты (в порядке текущих предпочтений):

  1. Использовать nltk-trainerдля обучения моего собственного тегировщика и фрагментатора. .
  2. Используйте оболочку python для TreeTagger только для этой части, так как TreeTagger уже может помечать французский язык, и кто-то написал оболочку, которая вызывает двоичный файл TreeTagger и анализирует результаты.
  3. Использовать совсем другой инструмент.

Если бы я сделал (1), я полагаю, мне нужно было бы создать свой собственный тегированный корпус. Это правильно, или было бы возможно (и разрешено) использовать French Treebank?

Если формат корпуса French Treebank (пример здесь) не подходит для использования с nltk-trainer, возможно ли преобразовать его в такой формат?

Какие подходы используют франкоговорящие пользователи NLTK к PoS-тегу и фрагменту текста?

11
задан casperOne 29 April 2012 в 14:36
поделиться