НЛП | Правила разделения
Опубликовано: 25 Июля, 2021
Ниже приведены шаги, необходимые для разбиения на части -
- Преобразование предложения в плоское дерево.
- Создание строки Chunk с использованием этого дерева.
- Создание RegexpChunkParser путем разбора граммера с помощью RegexpParser.
- Применение правила созданного фрагмента к ChunkString, которое соответствует предложению в фрагменте.
- Разделение большего фрагмента на меньший фрагмент с использованием определенных правил фрагментов.
- Затем ChunkString преобразуется обратно в дерево с двумя поддеревьями фрагментов.
Код №1: ChunkString изменяется с применением каждого правила.
# Loading Libraries from nltk.chunk.regexp import ChunkString, ChunkRule, ChinkRule from nltk.tree import Tree # ChunkString() starts with the flat tree tree = Tree( 'S' , [( 'the' , 'DT' ), ( 'book' , 'NN' ), ( 'has' , 'VBZ' ), ( 'many' , 'JJ' ), ( 'chapters' , 'NNS' )]) # Initializing ChunkString() chunk_string = ChunkString(tree) print ( "Chunk String : " , chunk_string) # Initializing ChunkRule chunk_rule = ChunkRule( '<DT><NN.*><.*>*<NN.*>' , 'chunk determiners and nouns' ) chunk_rule. apply (chunk_string) print ( "
Applied ChunkRule : " , chunk_string) # Another ChinkRule ir = ChinkRule( '<VB.*>' , 'chink verbs' ) ir. apply (chunk_string) print ( "
Applied ChinkRule : " , chunk_string, "
" ) # Back to chunk sub-tree chunk_string.to_chunkstruct() |
Выход:
Строка фрагмента: <<DT> <NN> <VBZ> <JJ> <NNS> Применяемое ChunkRule: {<DT> <NN> <VBZ> <JJ> <NNS>} Применяемое ChinkRule: {<DT> <NN>} <VBZ> {<JJ> <NNS>} Дерево ('S', [Tree ('CHUNK', [('the', 'DT'), ('book', 'NN')]), ('has', 'VBZ'), Tree ('CHUNK', [('many', 'JJ'), ('chapters', 'NNS')])])
Примечание. Этот код работает точно так же, как описано в шагах ChunkRule выше.
Код №2: Как выполнить эту задачу напрямую с помощью RegexpChunkParser.
# Loading Libraries from nltk.chunk.regexp import ChunkString, ChunkRule, ChinkRule from nltk.tree import Tree from nltk.chunk import RegexpChunkParser # ChunkString() starts with the flat tree tree = Tree( 'S' , [( 'the' , 'DT' ), ( 'book' , 'NN' ), ( 'has' , 'VBZ' ), ( 'many' , 'JJ' ), ( 'chapters' , 'NNS' )]) # Initializing ChunkRule chunk_rule = ChunkRule( '<DT><NN.*><.*>*<NN.*>' , 'chunk determiners and nouns' ) # Another ChinkRule chink_rule = ChinkRule( '<VB.*>' , 'chink verbs' ) # Applying RegexpChunkParser chunker = RegexpChunkParser([chunk_rule, chink_rule]) chunker.parse(tree) |
Выход:
Дерево ('S', [Tree ('CHUNK', [('the', 'DT'), ('book', 'NN')]), ('has', 'VBZ'), Tree ('CHUNK', [('many', 'JJ'), ('chapters', 'NNS')])])
Код № 3: Разбор с другим ChunkType.
# Loading Libraries from nltk.chunk.regexp import ChunkString, ChunkRule, ChinkRule from nltk.tree import Tree from nltk.chunk import RegexpChunkParser # ChunkString() starts with the flat tree tree = Tree( 'S' , [( 'the' , 'DT' ), ( 'book' , 'NN' ), ( 'has' , 'VBZ' ), ( 'many' , 'JJ' ), ( 'chapters' , 'NNS' )]) # Initializing ChunkRule chunk_rule = ChunkRule( '<DT><NN.*><.*>*<NN.*>' , 'chunk determiners and nouns' ) # Another ChinkRule chink_rule = ChinkRule( '<VB.*>' , 'chink verbs' ) # Applying RegexpChunkParser chunker = RegexpChunkParser([chunk_rule, chink_rule], chunk_label = 'CP' ) chunker.parse(tree) |
Выход:
Tree ('S', [Tree ('CP', [('the', 'DT'), ('book', 'NN')]), ('has', 'VBZ'), Дерево ('CP', [('многие', 'JJ'), ('главы', 'NNS')])])
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.