我遇到了一个可以通过交叉类型轻松解决的问题(目前正在讨论但尚未实施),并且想知道最干净的解决方法是什么。
我当前的设置大致对应于以下动物的 ABC 层次结构。有许多动物“特征”(CanFly
、CanSwim
等)被定义为抽象子类(尽管它们也可以被定义为 mixin)。
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def name(self) -> str: ...
class CanFly(Animal):
@abstractmethod
def fly(self) -> None: ...
class CanSwim(Animal):
@abstractmethod
def swim(self) -> None: ...
Run Code Online (Sandbox Code Playgroud)
以此我定义了特定的动物类别,包括抽象的和具体的:
class Bird(CanFly):
def fly(self) -> None:
print("flap wings")
class Penguin(Bird, CanSwim):
def name(self) -> str:
return "penguin"
def swim(self) -> None:
print("paddle flippers")
Run Code Online (Sandbox Code Playgroud)
我还定义了一个通用类来抚摸特定类型的动物:
from typing import Generic, TypeVar
T = TypeVar("T", bound=Animal, contravariant=True)
class Petter(Generic[T], ABC):
@abstractmethod …
Run Code Online (Sandbox Code Playgroud) 使用boost :: locale文档中的示例代码,我无法获得以下内容以正确地标记中文文本:
using namespace boost::locale::boundary;
boost::locale::generator gen;
std::string text="???????";
ssegment_index map(word,text.begin(),text.end(),gen("zh_CN.UTF-8"));
for(ssegment_index::iterator it=map.begin(),e=map.end();it!=e;++it)
std::cout <<"\""<< * it << "\", ";
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
这将中华人民共和国分为七个不同的角色中/华/人/民/共/和/国,而不是中华/人民/共和国.在ICU的文档,这增大对编译声称,中国应努力开箱,并使用基于字典的分词器正确分割短语.在上面的代码中使用"ja_JP.UTF-8"语言环境中的示例日语测试短语"生きるか死ぬか,それが问题だ." 确实有效,但此标记化不依赖于字典,仅在汉字/假名上边界.
我在这里建议直接在ICU中尝试相同的代码,但结果是一样的.
UnicodeString text = "???????";
UErrorCode status = U_ZERO_ERROR;
BreakIterator* bi = BreakIterator::createWordInstance(Locale::getChinese(), status);
bi->setText(text);
int32_t p = bi->first();
while (p != BreakIterator::DONE) {
printf("Boundary at position %d\n", p);
p = bi->next();
}
delete bi;
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
给定文本I/O流(例如来自open()
或StringIO()
),如何创建另一个流来过滤掉与特定模式匹配的行,而不首先读取整个输入流?我知道我可以很容易地得到一个可迭代的(line for line in input if filter(line))
,但我想要一个可搜索的流.我也理解,即使底层流允许随机访问,搜索也需要读取整个流,但这仍然比读取整个文件更好StringIO("".join(line for line in input if filter(line)))
.
(作为一个附加组件,如何记住重复搜索的指针将受到欢迎!)