Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于保留其他字符的想法 #48

Open
libook opened this issue Oct 27, 2023 · 2 comments
Open

关于保留其他字符的想法 #48

libook opened this issue Oct 27, 2023 · 2 comments

Comments

@libook
Copy link
Contributor

libook commented Oct 27, 2023

因为仅需要排序,不需要搜索,预期同声母相同的情况下可以按照第二个音节排序,所以使用2号模式(全拼),在此前提下:

场景1:含外文的标题的排序问题

"こどもじゃず" 会被处理成""
"こどもじゃず その2"会被处理成"2"

预期两者在排序后挨在一起,但实际结果会被分开;包含数字的在最前面,因为ASCII中数字在字母前面,不包含数字的被排在了所有项目最后。


场景2:含空格的标题排序问题

"The Witcher: Music Inspired by the Game" 会被处理成"TheWitcherMusicInspiredbytheGame"
"The Witcher 3: Wild Hunt - Official Soundtrack"会被处理成"TheWitcher3WildHuntOfficialSoundtrack"

预期第一代在前、第三代在后,但因为空格被删除了,而数字3在ASCII中在字母前面,所以实际结果是第三代排在前面、第一代排在后面。


想法

由于媒体库软件没有提供更多的标题结构和排序方案,在排序场景中,可能保留空格、标点、其他外文字符更规整、符合预期的排序结果。

分析代码后发现,删除其他字符的工作主要是由overtrue/pinyin来完成的,所以我给它提了PR,添加了新的fullSentence方法并被批准合并,最新版本5.3.0包含了这个特性。

// 保留所有其他字符
echo Pinyin::fullSentence('ル是片假名,π是希腊字母', 'none');
// ル shi pian jia ming ,π shi xi la zi mu

我看到emby_pinyin当前使用的是4.0的版本,overtrue/pinyin新的大版本在API上有较大变动,比如废除了原有的PINYIN_KEEP_NUMBER、PINYIN_KEEP_ENGLISH等参数改为强制保留数字、英文、标点,如果要升级到最新版可能需要重新看一下各个调用代码。

另外由于我没有搜索场景需求,无法评估对搜索场景的影响,可能需要从实际需求经验上进行评估,如何在完善排序场景的同时不影响搜索场景的效果。

需要开发者提供些意见。

@hisune
Copy link
Owner

hisune commented Oct 27, 2023

感谢贡献及建议,会尽早对overtrue/pinyin库进行升级和测试哈

@libook
Copy link
Contributor Author

libook commented Oct 27, 2023

可以修改这一行 https://github.com/hisune/emby_pinyin/blob/master/src/app/EmbyPinyin.php#L415

$sortName = (string)($this->pinyin->fullSentence($itemDetail->Name, 'none'));
// 因为fullSentence返回的不是字符串,所以需要转换一下。

我发现我提供的场景2的例子是有问题的,如果保留所有字符,由于第三代的空格在ASCII中比第一代的冒号更靠前,所以结果将依然是第三代排在前面……
不过这就属于标题命名本身的问题了。它们至少是挨在一起的,不会像场景一的例子那样直接被分离到了队列的首尾。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants