Можно ли создавать группы/слои в цепочке методов в Python?Python

Программы на Python
Ответить
Anonymous
 Можно ли создавать группы/слои в цепочке методов в Python?

Сообщение Anonymous »

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

Код: Выделить всё

object.routine1().routine2().routine3()
Но можно ли организовать методы в слои или группы при применении цепочки методов? например

Код: Выделить всё

object.Layer1.routine1().routine2().Layer2.routine3()
Контекст таков: я пытаюсь построить конвейер анализа текста, и различные уровни будут соответствовать этапам предварительной обработки уровня текста, уровня предложения и уровня токена:

Код: Выделить всё

text = "This is an example foo text with some special characters!!!! And some sentences"

pr = TextPreprocessor(text)
processed_text = (
pr.text_level.lower_case()
.sentence_level.split_sentences().remove_special_characters()
.token_level.tokenize()
.text
)
Это код, который почти (!) заставляет работать пример обработки текста:

Код: Выделить всё

import re

class TextLevelPreprocessor:
def __init__(self, parent):
self.parent = parent

def lower_case(self):
self.parent.text = self.parent.text.lower()
return self.parent

class SentenceLevelPreprocessor:
def __init__(self, parent):
self.parent = parent

def split_sentences(self):
self.parent.text = self.parent.text.split('. ')
return self.parent

def remove_special_characters(self):
self.parent.text = [re.sub('[!@#$]', '', s) for s in self.parent.text]
return self.parent

class TokenLevelPreprocessor:
def __init__(self, parent):
self.parent = parent

def tokenize(self):
self.parent.text = [t.split() for t in self.parent.text]
return self.parent

class TextPreprocessor:
def __init__(self, text):
self.text = text
self.text_level = TextLevelPreprocessor(self)
self.sentence_level = SentenceLevelPreprocessor(self)
self.token_level = TokenLevelPreprocessor(self)
Однако здесь будет работать только этот синтаксис

Код: Выделить всё

pr = TextPreprocessor(text)
processed_text = (
pr.text_level.lower_case()
.sentence_level.split_sentences().
.sentence_level.remove_special_characters()
.token_level.tokenize()
.text
)
это означало бы, что придется добавлять «Слой» или «Группу» каждый раз, когда вы используете метод, что кажется многословным.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»