开源项目学习进程

发布时间:2019-03-08  栏目:Python  评论:0 Comments

本篇小说不是为了记开发流水账,而是想把支付进度的相遇的题材以及消除思路和豪门展开交换和读书。作者是一名一般的
PHP
工程师,希望对初级开发同学有所支持。具体的心得体会合文末的总结

开源项目学习进程

1、SqlBuilder项目 

2、ehcache

3、hibernate基本使用

本月尾,小编在 GitHub
上开源了2个和谐的小品种:chinese-typesetting。那是1个更正中文文案排版的
Composer 包。

chinese-typesetting
包涵以下职能:

  • 在国语与英文字母/用于数学、科学和工程的希腊共和国(The Republic of Greece)字母/数字之间添加空格;
  • 有限度的全角转半角(英文、数字、空格以及部分特殊字符等采纳半角字符);
  • 修复错误的标点;
  • 清除 HTML 标签的体制;
  • 清除空的 HTML 标签;
  • 消除段首缩进;

本周,公司付出工作不多,无加班,于是从头盘算新功能勘误罗马尼亚语专出名词大小写的实现。

匈牙利(Hungary)语专知名词的数目出自

率先,面临的第①个难题是:

丹麦语专盛名词的多寡从哪来?

本身第三想到的是 Python 有1个自然语言处理的包
NLTK,这几个包有个名为 pos_tag
的函数,能够用来辨别并标注每一种单词的词性,个中被标明为 NNP 或 NNPS
的单词正是专盛名词(Proper Noun)。笔者困惑,NLTK
数据包里应该有1个一见倾心的专盛名词数据集,可是,苦于能力有限,笔者直接没有找到。

上述的途径走不通后,笔者又经过 谷歌(Google)搜索,发现经过互联网字典来获取数据是一条有效的方案。通过这一措施,终于在
Wiktionary
找到了塞尔维亚语专出名词列表。于是,利用 Python
写了二个爬虫小本子,爬取了对应的多寡。

最后,就是对爬取到的数额开始展览了部分规整和筛选。

筛选方案如下:

  • 使用 is_numeric() 方法,剔除诸如 007 等词汇;
  • 使用 '/\W/' 正则,剔除诸如 ǃXóõ 等词汇;
  • 剔除 strlen 方法,剔除 A 等单字节词汇;
  • 剔除跟 HTML、CSS、JavaScript 保留字争持的词汇;

何以让使用者定制专盛名词数据

初期的代码如下:

/**
 * 专有名词使用正确的大小写
 * Correct English proper nouns.
 *
 * @param $text
 *
 * @return null|string|string[]
 */
public function properNoun($text)
{
    $dict = include __DIR__ . '/../data/dict.php';
    foreach ($dict as $noun) {
        $text = preg_replace("/\b{$noun}\b/i", $noun, $text);
    }
    return $text;
}

而后想到,要是选择那个措施的开发者想扩张可能忽视某个专盛名词,那该怎么做呢?
于是,我又将 properNoun() 方法改造如下:

/**
 * 专有名词使用正确的大小写
 * Correct English proper nouns.
 *
 * @param $text
 * @param array $extend
 * @param array $ignore
 *
 * @return null|string|string[]
 */
public function properNoun($text, array $extend = [], array $ignore = [])
{
    $dict = include __DIR__ . '/../data/dict.php';
    if ($extend) {
        $dict = array_merge($dict, $extend);
    }
    if ($ignore) {
        $dict = array_diff($dict, $ignore);
    }

    foreach ($dict as $noun) {
        $text = preg_replace("/\b{$noun}\b/i", $noun, $text);
    }
    return $text;
}

哪些立异和优化代码逻辑

自作者在写这么些效应的时候,也在斟酌和参考一些存活开源项指标贯彻逻辑。在观望开源项目
auto-correct 的一个
commit
上后(PS:那么些 P本田CR-V 是社区大神 overtrue
提交的。),我又将 properNoun() 方法改造如下:

public function properNoun($text, array $extend = [], array $ignore = [])
{
    $dict = include __DIR__ . '/../data/dict.php';
    if ($extend) {
        $dict = array_merge($dict, $extend);
    }
    if ($ignore) {
        $dict = array_diff($dict, $ignore);
    }
    foreach ($dict as $noun) {
        $text = preg_replace("/(?<!\.|[a-z]){$noun}(?!\.|[a-z])/i", $noun, $text);
    }
    return $text;
}

怎样幸免超负荷替换

在自作者觉得就要马到成功的时候,笔者用事先写好的 PHPUnit
单元测试代码进行了测试,结果报出了不当,在上述措施中,要是传入的参数是富含
HTML 标签的富文本,那么 HTML 的要素、成分属性以及值都有或许会被交流。

何以幸免超负荷替换这一个标题吧?也正是说:

只替换文本,而忽视 HTML 标签及标签内部的剧情?

本人尝试写了有个别套匹配方案,都未果了。最终依旧请出了 谷歌大神来支持。那里,搜索的关键字很重点,最好想把您要摸索的重庆大学词翻译成对应的英文单词,那样搜索出的结果会令你更中意。结果自个儿找到了消除方案:Matching
A Word / Characters Outside Of Html
Tags

由此地方那部文章的提醒,作者又将 properNoun() 方法改造如下:

public function properNoun($text, array $extend = [], array $ignore = [])
{
    $dict = include __DIR__ . '/../data/dict.php';
    if ($extend) {
        $dict = array_merge($dict, $extend);
    }
    if ($ignore) {
        $dict = array_diff($dict, $ignore);
    }
    foreach ($dict as $noun) {
        // Matching proper nouns Outside Of Html Tags
        $text = preg_replace("/(?<!\.|[a-z]){$noun}(?!\.|[a-z])(?!([^<]+)?>)/i", $noun, $text);
    }
    return $text;
}

付出总括

  • 学会正确上网;
  • 擅长 谷歌(Google)、Github 和
    StackOverflow,那三样“神器”会帮您化解掉开发进度中遇见的多方面(只怕说所有)问题;
  • 学会一些 Google搜索小技巧。例如将寻找关键字翻译成葡萄牙共和国语单词,那样的物色结果会令你更中意;
  • 克罗地亚共和国(Republika Hrvatska)语真的很要紧。最起码你应该在 Chrome 浏览器上设置贰个 Google
    翻译

    的插件;
  • PHPUnit 真的很有用,越发是在频仍增改效能仍然供给代码重构的门类中。
  • 永不让本人仅限于2个编制程序语言,学习其余一门或多门语言作为协助,有益于拓展思路和开拓眼界。
  • 多逛逛 Laravel China 那样的高格调社区;

终极的话

一旦还有哪些需求说的话,那正是求 Star
啦,哈哈哈哈哈。项目地址:https://github.com/jxlwqq/chinese-typesetting

留下评论

网站地图xml地图