ai/src/utils/or.ts

45 lines
1.7 KiB
TypeScript
Raw Normal View History

2018-09-02 14:40:03 +00:00
import { hankakuToZenkaku, katakanaToHiragana } from './japanese';
2018-09-02 13:23:10 +00:00
2018-09-02 14:40:03 +00:00
export default function(text: string, words: (string | RegExp)[]): boolean {
2018-09-02 13:23:10 +00:00
if (text == null) return false;
2018-09-02 14:40:03 +00:00
text = katakanaToHiragana(hankakuToZenkaku(text));
words = words.map(word => typeof word == 'string' ? katakanaToHiragana(word) : word);
2018-09-02 13:23:10 +00:00
2018-09-02 14:16:20 +00:00
return words.some(word => {
/**
*
*
*/
2018-09-03 02:41:24 +00:00
function denoise(text: string): string {
2018-09-02 14:45:47 +00:00
text = text.trim()
2018-09-02 14:16:20 +00:00
.replace(/[!]+$/, '')
2018-09-02 14:45:47 +00:00
.replace(/っ+$/, '')
2018-09-02 14:16:20 +00:00
// 末尾の ー を除去
// 例えば「おはよー」を「おはよ」にする
// ただそのままだと「セーラー」などの本来「ー」が含まれているワードも「ー」が除去され
// 「セーラ」になり、「セーラー」を期待している場合はマッチしなくなり期待する動作にならなくなるので、
// 期待するワードの末尾にもともと「ー」が含まれている場合は(対象のテキストの「ー」をすべて除去した後に)「ー」を付けてあげる
2018-09-02 14:45:47 +00:00
.replace(/ー+$/, '') + ((typeof word == 'string' && word[word.length - 1] == 'ー') ? 'ー' : '');
text = text
2018-09-02 14:16:20 +00:00
.replace(/。$/, '')
2018-09-02 14:40:03 +00:00
.replace(/です$/, '')
2018-09-03 02:59:55 +00:00
.replace(/(\.|…)+$/, '')
.replace(/[♪♥]+$/, '')
2018-09-02 14:16:20 +00:00
.replace(/^藍/, '')
2018-09-02 14:40:03 +00:00
.replace(/^ちゃん/, '')
2018-09-02 14:16:20 +00:00
.replace(/、+$/, '');
2018-09-02 14:45:47 +00:00
return text;
2018-09-02 14:16:20 +00:00
}
2018-09-02 13:23:10 +00:00
2018-09-02 14:40:03 +00:00
if (typeof word == 'string') {
2018-09-03 02:41:24 +00:00
return (text == word) || (denoise(text) == word);
2018-09-02 14:40:03 +00:00
} else {
2018-09-03 02:41:24 +00:00
return (word.test(text)) || (word.test(denoise(text)));
2018-09-02 14:40:03 +00:00
}
2018-09-02 14:16:20 +00:00
});
2018-09-02 13:23:10 +00:00
}
2018-09-02 14:16:20 +00:00