科里尤纳 / wiki-parser
MediaWiki 分类解析器
dev-master
2017-02-13 00:09 UTC
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-10 23:20:12 UTC
README
描述
此解析器解析 MediaWiki 分类。
安装
此包已启用 composer。只需在您的 composer.json
中引入即可。
"require": { "kolyunya/wiki-parser": "*" }
使用示例
以下代码将 英语名词 解析到文件中。
// Create a parser instance. $parser = new Parser(); // Set host to wiktionary $host = new Wiktionary(); $parser->setHost($host); // Set language to English. $language = new EnglishLanguage(); $parser->setLanguage($language); // Set category to nouns. $category = new NounsCategory(); $parser->setCategory($category); // Add a filter which will filter out all non-alphabetical words. $filter = new AlphabetFilter(); $parser->addFilter($filter); // Create a processor which will write all words to a file. $processor = new FileSaver(); $parser->addProcessor($processor); // Perform parsing. $parser->parse();
可用过滤器
WordFilter
- 传递匹配^\w+$
正则表达式模式的单词。AlphabetFilter
- 传递只包含对应语言字母的单词。MinimumLengthFilter
- 传递长度超过指定长度的单词。MaximumLengthFilter
- 传递长度短于指定长度的单词。
可用处理器
StdoutPrinter
- 将所有单词打印到stdout
。FileSaver
- 将所有单词保存到指定文件。DatabaseSaver
- 将所有单词保存到数据库。LowercaseShifter
- 将所有单词转换为小写。UppercaseShifter
- 将所有单词转换为大写。
添加语言
要添加任意语言,您应该实现 LanguageInterface
。它包含两个方法。 getCode
方法必须返回标准的语言代码(例如,英语的 en
)。getAlphabet
方法必须返回语言字母表的字母数组。
自定义分类
实现自定义分类的建议方式是扩展 BaseCategory
类。您应该在您的分类类构造函数中使用 setTitle
方法为特定语言添加标题。
class NounsCategory extends BaseCategory implements CategoryInterface { public function __construct() { $this->setTitle(new EnglishLanguage(), 'Category:English_nouns'); $this->setTitle(new FrenchLanguage(), 'Catégorie:Noms_communs_en_français'); $this->setTitle(new GermanLanguage(), 'Kategorie:Substantiv_(Deutsch)'); $this->setTitle(new RussianLanguage(), 'Категория:Русские_существительные'); } }
自定义处理器
如果您需要实现自定义处理器,您有两个选项。
首先,您可以实现 ProcessorInterface
,这相当简单。
class StdoutPrinter implements ProcessorInterface { public function process(LanguageInterface $language, &$item) { $data = "$item\n"; echo $data; } }
其次,您可以使用 CustomProcessor
,它应该提供一个回调函数来完成某些操作。
$stdoutPrinter = new CustomProcessor( function (LanguageInterface $language, &$item) { $data = "$item\n"; echo $data; } );