Комплексное руководство по маркировке частей речи с использованием NLTK

Методы маркировки POS-терминалов с использованием NLTK:

  1. Теггер POS по умолчанию:
    Библиотека NLTK предоставляет встроенный теггер, называемый «DefaultTagger». Он присваивает тег по умолчанию каждому слову в данном тексте.
import nltk
from nltk.tag import DefaultTagger
# Define a default tagger
default_tagger = DefaultTagger('NN')
# Tagging example sentence
sentence = "NLTK is a powerful library for natural language processing."
tokens = nltk.word_tokenize(sentence)
tagged_words = default_tagger.tag(tokens)
print(tagged_words)
  1. Тегер регулярных выражений:
    Библиотека NLTK позволяет нам создавать собственные теги тегов на основе регулярных выражений. Мы можем определить шаблоны и соответствующие теги для соответствия определенным шаблонам слов.
import nltk
from nltk.tag import RegexpTagger
# Define patterns and tags
patterns = [
    (r'.*ing$', 'VBG'),               # gerunds
    (r'.*ed$', 'VBD'),                # simple past tense
    (r'.*es$', 'VBZ'),                # 3rd singular present
    (r'.*ould$', 'MD'),               # modals
    (r'.*\'s$', 'NN$'),               # possessive nouns
    (r'.*s$', 'NNS'),                 # plural nouns
    (r'^-?[0-9]+(.[0-9]+)?$', 'CD'),  # cardinal numbers
    (r'.*', 'NN')                     # nouns (default)
]
# Create a regex tagger
regexp_tagger = RegexpTagger(patterns)
# Tagging example sentence
sentence = "I am learning NLP with NLTK."
tokens = nltk.word_tokenize(sentence)
tagged_words = regexp_tagger.tag(tokens)
print(tagged_words)
  1. Unigram Tagger:
    Библиотека NLTK предоставляет UnigramTagger, который назначает теги на основе наиболее часто встречающегося тега для каждого слова в данном корпусе.
import nltk
from nltk.corpus import brown
from nltk.tag import UnigramTagger
# Get tagged sentences from the Brown corpus
tagged_sentences = brown.tagged_sents()
# Split corpus into training and testing sets
split_ratio = int(len(tagged_sentences) * 0.9)
train_sentences = tagged_sentences[:split_ratio]
test_sentences = tagged_sentences[split_ratio:]
# Train a unigram tagger
unigram_tagger = UnigramTagger(train_sentences)
# Evaluate the tagger
accuracy = unigram_tagger.evaluate(test_sentences)
print("Accuracy:", accuracy)
# Tagging example sentence
sentence = "NLTK is a powerful library for natural language processing."
tokens = nltk.word_tokenize(sentence)
tagged_words = unigram_tagger.tag(tokens)
print(tagged_words)
  1. Bigram Tagger:
    Библиотека NLTK предоставляет BigramTagger, который назначает теги на основе тега предыдущего слова и текущего слова.
import nltk
from nltk.corpus import brown
from nltk.tag import BigramTagger
# Get tagged sentences from the Brown corpus
tagged_sentences = brown.tagged_sents()
# Split corpus into training and testing sets
split_ratio = int(len(tagged_sentences) * 0.9)
train_sentences = tagged_sentences[:split_ratio]
test_sentences = tagged_sentences[split_ratio:]
# Train a bigram tagger
bigram_tagger = BigramTagger(train_sentences)
# Evaluate the tagger
accuracy = bigram_tagger.evaluate(test_sentences)
print("Accuracy:", accuracy)
# Tagging example sentence
sentence = "NLTK is a powerful library for natural language processing."
tokens = nltk.word_tokenize(sentence)
tagged_words = bigram_tagger.tag(tokens)
print(tagged_words)
  1. Brill Tagger:
    Библиотека NLTK предоставляет BrillTagger, который использует обучение на основе преобразований для повышения точности назначения тегов.
import nltk
from nltk.corpus import brown
from nltk.tag import BrillTaggerTrainer
# Get tagged sentences from the Brown corpus
tagged_sentences = brown.tagged_sents()
# Split corpus into training and testing sets
split_ratio = int(len(tagged_sentences) * 0.9)
train_sentences = tagged_sentences[:split_ratio]
test_sentences = tagged_sentences[split_ratio:]
# Train a Brill tagger
brill_tagger = BrillTaggerTrainer(train_sentences)
# Evaluate the tagger
accuracy = brill_tagger.evaluate(test_sentences)
print("Accuracy:", accuracy)
# Tagging example sentence
sentence = "NLTK is a powerful library for natural language processing."
tokens = nltk.word_tokenize(sentence)
tagged_words = brill_tagger.tag(tokens)
print(tagged_words)

В этой статье мы рассмотрели несколько методов маркировки POS-терминалов с помощью NLTK. Мы рассмотрели DefaultTagger, RegexpTagger, UnigramTagger, BigramTagger и BrillTagger. Каждый метод имеет свои сильные стороны и может быть полезен в различных задачах НЛП. Понимая эти методы и примеры их кода, вы сможете улучшить свои проекты НЛП с помощью точных POS-тегов.