vgip/datanorm

数据归一化

1.2.1 2021-08-09 17:15 UTC

This package is auto-updated.

Last update: 2024-09-10 00:23:16 UTC


README

从某些开源数据源进行数据归一化

安装

系统要求

您需要 PHP >= 7.4,但推荐使用最新稳定版本的 PHP

Composer

$ composer require Vgip/Datanorm

功能列表

从乌克兰文到英文的转写 KMU 2010-01-27 #55

use Vgip\Datanorm\Transliteration\UkrEng\Cabmin2010;

$word = 'Єзгїґіпенєп';
$cabmin2010 = new Cabmin2010();
$wordTransliterated = $cabmin2010->transliterate($word);
echo $word.' -> '.$wordTransliterated;

kga.gov.ua 获取基辅街道获取器

Vgip\Datanorm\Parcer\Address\Ukr\Kyiv\StreetNameKga

从 CSV 文件获取归一化数据的数组

检查并归一化街道名称数据

  • 将可能的撇号符号转换为单个符号(ʼ - 02BC)。
  • 检查 id(禁止的符号,重复)。如果出错,请参阅 $this->warning。
  • 通过白名单检查街道类型。新类型保存到 $this->warning 和 $this->typeNotFound。
  • 通过白名单检查基辅区名称。新的基辅区名称保存到 $this->warning 和 $this->districtNotFound。
  • 检查街道名称和归一化后的街道名称。 (如果数据保存到 $this->streetNormalization 数组)
  • 生成 $this->nameDouble 数组 - 保存两个或更多重复的街道名称。
  • 生成 $this->nameList - 所有唯一的街道名称。
  • 生成 $this->typeCounter - 基辅所有街道类型的数量。

方法 getCsvAsArray() 的结果数组

  • ['number'] - (int) 文件中的序列号
  • ['id'] - (int) 文件中的标识符
  • ['name_original'] - (string) 文件中的街道名称
  • ['name'] - (string) 归一化后的街道名称
  • ['type_name'] - (string) 文件中的街道类型名称
  • ['type_key'] - (string) 街道类型键
  • ['district_string'] - (string) 文件中的街道区域
  • ['district_list'] - (array) 街道区域 ['district_key', 'district_key', ...]
  • ['document_name'] - (string) 赋予对象名称的文件
  • ['document_date'] - (string) 赋予对象名称的文件的日期
  • ['document_number'] - (string) 赋予对象名称的文件的编号
  • ['document_title'] - (string) 命名对象的文件的标题
  • ['place_description'] - (string) 城市中对象的地点
  • ['name_old'] - (string) 对象的旧名称
  • ['type_old'] - (string) 对象的旧类别(类型)

示例

use Vgip\Datanorm\Parcer\Address\Ukr\Kyiv\StreetNameKga;
use Vgip\Datanorm\Directory\Address\Country\Ukr\Address AS DirUkrAddress;
use Vgip\Datanorm\Directory\Address\Country\Ukr\City\Kyiv AS DirKyiv;
use Vgip\Datanorm\Directory\Lang\Ukr\Pattern AS PatternUkrAddress;
use Vgip\Datanorm\Directory\Address\Country\Ukr\StreetNormalizedList;
use Vgip\Datanorm\Directory\Address\Country\Ukr\StreetNormalization;

$dirUkrAddress = DirUkrAddress::getInstance();
$dirKyiv = DirKyiv::getInstance();
$patternUkrAddress = PatternUkrAddress::getInstance();
$streetNormalizedListObj = StreetNormalizedList::getInstance();
$streetNormalizedList = $streetNormalizedListObj->getNormalization();

/** Get configuration and whitelist data */
$pathSourceFile = join(DIRECTORY_SEPARATOR, ['file', 'Reestr_vulits_Kyiva_2020_10_25.csv']);
$streetTypeList = $dirUkrAddress->getStreetTypeWhitelist();
$districtWhitelist = $dirKyiv->getDistrictWhitelist();
$patternStreetName = $patternUkrAddress->getStreetName();

/** Object initialization */
$streetNameKga = new StreetNameKga();

/** Set parameter */
$streetNameKga->setTypeWhitelist($streetTypeList);
$streetNameKga->setDistrictWhitelist($districtWhitelist);
$streetNameKga->setStreetNormalization($streetNormalizedList);
$streetNameKga->setPatternStreetName($patternStreetName);

/** Get a result (array) with normalized data */
$data = $streetNameKga->getCsvAsArray($pathSourceFile);

/** Get other data */
$res = [];
$res['type_list'] = $streetNameKga->getTypeList();
$res['type_counter'] = $streetNameKga->getTypeCounter();
$res['name_list'] = $streetNameKga->getNameList();
$res['name_double'] = $streetNameKga->getNameDouble();
$res['district_not_whitelist'] = $streetNameKga->getDistrictNotFound();

/** Get warnings if present */
$warning = $streetNameKga->getWarning();
$warningValue = $streetNameKga->getWarningValue();
if (null !== $warning AND count($warning) > 0) {
    print_r($warning);
}
print_r($data);
print_r($res);

乌克兰语

撇号

结果数据将包含乌克兰撇号符号 "ʼ" Unicode 符号 U+02BC。所有其他类似字符(' - U+0027, ’ - U+2019 等)将被替换为 ʼ (U+02BC)。U+02BC - 此符号用于乌克兰域名(ICANN)。

街道名称归一化

  • 姓名和姓氏 - 学术家叶夫雷莫夫,将军阿维金,元帅比留佐夫
  • 姓名和姓氏 - 列昂尼德·比科夫
  • 家庭关系和姓氏 - 兄弟泽罗夫,鲁丁斯基家庭

版本控制

数据归一化遵循 语义版本控制