Code Monkey home page Code Monkey logo

pinyin's Issues

编码问题

这个库使用的汉字的编码是什么呢?我传进去的字符是gbk编码的,发现转化不了。谢谢。

字母和数字连在一起的情况下的返回值

当字母和数字连一起的情况下,数字变成了:
传入: aaaa1234

输出: a\

如果传入aaaa_1234

输出:aaaa_

我的设置是
Pinyin::set('delimiter', '');
Pinyin::set('accent', false);

想问一下,第一种情况只保留了一个字母还加上了双斜线?

性能问题

转换一个词好慢,几秒,怎么破。

发现两个小bug

bug:
1、···only_chinese 设置为true的时候···
Pinyin::parse("带着希望去china"); 返回的数组里面src只有中文带着希望去

2、使用Pinyin::parse("带着希望去china")返回的数组letter英语单词只有首字母

能否批量取姓名的拼音呢?

作者你好
现在有个情况是我有1000条记录,存放了中文名,我想要取出这些人名的拼音,但是透过$pinyin->name()这样遍历去取会花费超过10s的时间,我将这些姓名变成一个大的文本想直接透过$pinyin->name()一下子得到姓名,但我失败了,我得到了第一个字的拼音。
那么请问有什么更好的办法可以解决这个问题吗?

非常感谢!

几个地名翻译错误

  1. 乌拉特前旗,翻译为wù l tè qián qí,应为wù lā tè qián qí
  2. 朝阳区,翻译为zhāo yáng qū,应为cháo yáng qū
  3. 绩溪县,翻译为jī xī xiàn,应为jì xī xiàn
  4. 百色县,翻译为bó sè shì,应为bǎi sè shì
  5. 都安瑶族自治县,翻译为dōu ān yáo zú zì zhì xiàn,应为dū ān yáo zú zì zhì xiàn
  6. 塔什库尔干,翻译为tǎ shén kù ěr gàn,应为tǎ shí kù ěr gān
  7. 长阳土家族自治县,翻译为zhǎng yáng tǔ jiā zú zì zhì xiàn,应为cháng yáng tǔ jiā zú zì zhì xiàn
  8. 马尾区,翻译为mǎ yǐ qū,应为mǎ wěi qū
  9. 三都水族自治县,翻译为sān dōu shuǐ zú zì zhì xiàn,应为sān dū shuǐ zú zì zhì xiàn

bug

对你说 转化成了 'dui-ni-shui`

Pinyin::pinyin('对你说', [
    'delimiter' => '-',
    'accent' => false,
    // 'only_chinese' => true
])

自定义词库中有些汉字无法转译成拼音字母

你好,我在pinyin/data目录下新增了自定义的文件words_6,文件内容如下:
<?php
return array (
'' => ' zē',
'' => ' gē',
'隣' => ' lē',
);
但是输出$pinyin = $pinyin->convert('')的返回值,确是个空数组。通过查看源代码,发现你首先对字符串进行了预处理,如果不满足正则匹配preg_replace("~[^\p{Han}\p{P}\p{Z}\p{M}\p{N}\p{L}\t]u", '', $string)就返回空字符串,难道“”不满足p{Han}这个匹配条件吗?是否可以提供一个有效的p{Han}所支持的字符列表?如果p{Han}所对应的汉字范围不支持,是否有方法修正这样的错误?谢谢

内存性能优化~

看了下源码将3.5MB的库都载入到内存中使用造出了极大的性能浪费~
优化方案可以使用文件流打开库文件对行操作进行匹配读取虽然速度没有直接在数组中操作快~
但是可以避免性能浪费建议加入缓存拓展接口因为第三方使用的项目都有自己的缓存机制加一个save和get的接口可以加快转换~
在实际项目中~载入3.5MB的文件(还在不断扩大)真的不现实。
可能稍微不注意就内存溢出了!

代码优化

public function map(Closure $callback)
{
for ($i = 0; $i < 100; ++$i) {
$segment = $this->path.'/'.sprintf($this->segmentName, $i);
if (file_exists($segment)) {
$dictionary = (array) include $segment;
$callback($dictionary);
}
}
}

这块儿 loop 次数 能不能优化下呢 调用100次 file_existes 感觉不太智能 如果预先 给定 我们的字库文件数目呢

v3不好扩展到Thinkphp 3.2.3中

v2挺好扩展的。把:namespace Overtrue\Pinyin;命名空间注释。就扩展成功了。

今天看到老大更新到v3了。。扩展的试了下。
提示:Pinyin.php 164行错误。
namespace Overtrue\Pinyin;命名空间我注释了。不注释貌似不好扩展。

文档说明错误

Pinyin::letter('您好世界', ['delimiter' => '-']); //N-H-S-J
第二个参数不是数组。建议增加一个大小写输出控制参数

性能优化

读了下超哥的代码,看到每次在载入词库的时候都会重新组织一下数组的数据结构(词的第一个字为键值),这个过程不知道能不能在dict.php文件中就做好,以后就不需要每次组织一下这个数据结构呢,我修改了一下代码发现在我的自己上找一个词需要1.0x秒,但是如果先组织号数据结构之后就变成了0.46x秒了。不知道这样子编写有什么原因呢?

礼貌性的硬一下,哦不不不,就是问下是否需要一个yield生成器类型的loader呢?

如题,因为之前改过一个版本的yield版本的库,因为性能,的确是一个大问题。

不过,比如程序不熟在虚拟机,以及使用在内存不大的程序上的场景挺多的~

所以,礼貌性的问一下,是否需要一个这样的loader?

如果需要,我提一个pr吧~重写fork了拼音库。

先讲一下,在2.x版本的时候就考虑使用这个库,但是当时文件都在内存,正式环境使用优点不切实际,后来出了3.x,也不利于这样的环境下使用。

先说下环境吧,一个社交类的产品,需要根据用户名设置search key,也就是用户名单字母缩写和全拼用语搜索使用。

线上环境不可能给出那么大的内存给单个请求使用的,所以,yield来使用的场景还是蛮多的~

之前利用作者的库二开了一份yield的代码,正在使用中。。。

作者既然有接口类,我看到这两天有位phper提了一个全部载入内存的loader。

所以考虑要不要给作者提一个yield特性不占用内存的pr呢~。

permlink自动过滤数字了

这边把数字都给过滤掉,我觉得是不科学的。

$pinyin = new Overtrue\Pinyin\Pinyin();
$str = '1中文有数字3哈哈2';
$str = $pinyin->permlink($str);
var_dump($str); // string(26) "zhong-wen-you-shu-zi-ha-ha"

question

能不能提供一个接口去load本地的词库。

Readme中说补充词库的话需要

src/Pinyin/data/additional.php

这样的话某些情况得改源码

没有的字库

echo Pinyin::letter("阿坝藏族羌族自治州");

//B Z Z Q Z Z Z Z

明显缺少一个A

冯 默认被转换为 ping2

    [暴虎冯河] =>   bao4 hu3 ping2 he2
    [冯] =>   ping2
    [冯内果] =>   feng2 nei4 guo3
    [冯友兰] =>   feng2 you3 lan2
    [冯梦龙] =>   feng2 meng4 long2
    [冯德英] =>   feng2 de2 ying1
    [冯武] =>   feng2 wu3
    [冯玉祥] =>   feng2 yu4 xiang2
    [冯窦伯] =>   feng2 dou4 bo2
    [冯骥才] =>   feng2 ji4 cai2

由于常见于姓氏,建议还是默认feng2

关于不带调 ü 的 ascii 转写问题

建议增加一个额外的参数,以支持 ü --> yu 转写方案,而不是 ü --> v。

参见:https://zh.wikipedia.org/wiki/%C3%9C

ü 这一字母不便于用常用的美式键盘作电脑输入,汉语拼音输入法中都以v代替输入。英语中没有这一字母,因此,带有这一字母的汉语人名、地名转写为英语时,有时只好将两点省去,写为u,引起混淆,例如女娲被错误地转写为Nuwa。部分人士[11]认为,涉及ü的音节只有nü、lü、nüe、lüe四个,因此可以把这四个音节拼写为nyu、lyu、nyue、lyue,这样既便于电脑输入,在拼读时也更准确;不过“nyu”与其他音节相连时,会引起混淆,需要加隔音符号,譬如“妓女(jì'nyǔ)”若不加隔音符号易与“金鱼(jīnyú)”混淆。中华人民共和国自发行电子护照以来,对人名中的“ü”都转写成“yu”,如吕姓一律作“Lyu”[4][12][e]。2011年10月发布国家标准GB/T 28039-2011《**人名汉语拼音字母拼写规则》明文规定:“根据技术处理的特殊需要,必要的场合(如公民护照、对外文件和书刊等),大写字母Ü可以用YU代替。例如: Lǚ Hépínɡ 拼写为:LYU HEPING 吕和平”

一个奇怪的问题

代码如下

<?php
 $option = [
            'accent'       => false,
            'delimiter'    => ' ',
            'only_chinese' => false,
        ];
print_r(Pinyin::trans('Freeman俢', $option));

转换关键字Freeman俢
结果如下

Freeman俢

字未转换

有时单字也是不能正常转换。不确定什么时候会出现。

汉字+字母+数字报错

Pinyin::set('delimiter', '');   
Pinyin::letter("测试R60");

抛异常:

[ErrorException]     
Undefined offset: 6

设置:

Pinyin::set('only_chinese', true);

就不报错。

Class 'Overtrue\Pinyin\Pinyin' not found

我按照文档来一步一步的把Pinyin安装好了,但是在代码中使用的时候,提示说Class 'Overtrue\Pinyin\Pinyin' not found。我是用的是thinkphp3.2.3,下面的是我的代码:

<?php
namespace Home\Controller;
//namespace Overtrue\Pinyin;
use Think\Controller;
use Overtrue\Pinyin\Pinyin;
class TestController extends Controller {
	public function _initialize() {}
	public function test() {

		$pinyin = new Pinyin();
		var_dump($pinyin -> convert('你好'));
	}
}

autoload.php文件也在thinkphp的入口文件加载了,为什么还是会出现这样的情况?求求帮忙看下,解答下疑惑......

词根问题

在词典文件中,足的拼音有误,当前为ju,正确的应为zu
screen shot 2015-07-11 at 14 21 13

你写的一直都存在占用内存很大的问题~所以我fork你的代码,自己写了一份。

在v2版本我就给大哥你提过这个问题了呢~
不过呢~你只做的新版本也是有这个问题,单测都需要花费14mb。我统计了下,单测需要耗费4mb的内存。而其余的10mb则是你的字典资源占用的。
我的仓库 https://github.com/medz/pinyin
基于你的代码基础,写了一份试用yield特性的代码,单测测试的占用直接缩减到了最低。
希望这份代码,对你有启示吧!后面,我可能还会添加更多的代码特性进去。

汉字转拼音,文件执行超内存

PHP Fatal error:  Allowed memory size of 67108864 bytes exhausted (tried to allocate 6 bytes) in /mnt/www/api-3.weipei.cc/vendor/overtrue/pinyin/src/Pinyin/Pinyin.php on line 292

关于加载字典文件的路径问题

由于字典文件不一定放在默认位置,为了灵活,建议在调用方法里增加可指定加载字典位置的参数。感谢您的开源,帮助了我解决了问题。

'堃' 字无法转换为拼音

我在写一个用户管理系统,用户头像的存储是使用 年级 + 中文名字的拼音 构成的,因此调用了这个类库,但在测试时,发现 ( kun ) 字没有被转为拼音( 摔呀,这还是我自己的名字 )。
测试代码如下

require '../vendor/autoload.php';
use Overtrue\Pinyin\Pinyin;
Pinyin::set('delimiter','');
Pinyin::set('accent',false); // 设置 中文转拼音 类库, 无分隔,无音调

$name = '堃';
$name_pinyin = Pinyin::trans($name); // 获取拼音
echo $name_pinyin;

输出结果( 直接输出了原汉字 ):
image

同时测试了几个少见的字,都能够正确输出。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.