科里尤纳/wiki-parser

MediaWiki 分类解析器

dev-master 2017-02-13 00:09 UTC

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;
    }
);