111 lines
4.1 KiB (Stored with Git LFS)
JavaScript
111 lines
4.1 KiB (Stored with Git LFS)
JavaScript
$(document).on('click', '.mini_irobtn', function (event) {
|
|
event.preventDefault();
|
|
mother = $(this).parent();
|
|
mother2 = $(mother).parent();
|
|
$(mother2).next('.nsfw_main').children().removeClass('block');
|
|
$(mother2).next('.nsfw_main').children().addClass('clear');
|
|
|
|
$(mother2).next('.nsfw_main').removeClass('nsfw_main');
|
|
$(mother2).hide();
|
|
});
|
|
|
|
|
|
$(document).on('click', '#ueuse_image', function (event) {
|
|
var imgLink = $(this).attr('src');
|
|
|
|
var modal = $('#Big_ImageModal');
|
|
var modalMain = $('.modal-content');
|
|
var modalimg_zone = $('#Big_ImageMain');
|
|
|
|
$(modalimg_zone).attr('src',imgLink);
|
|
|
|
modal.show();
|
|
modalMain.addClass("slideUp");
|
|
modalMain.removeClass("slideDown");
|
|
|
|
modal.on('click', function() {
|
|
modalMain.removeClass("slideUp");
|
|
modalMain.addClass("slideDown");
|
|
window.setTimeout(function(){
|
|
modal.hide();
|
|
}, 150);
|
|
});
|
|
});
|
|
|
|
function view_notify(notify){
|
|
$("#notify").children("p").text(notify);
|
|
$("#notify").show();
|
|
setTimeout(function(){
|
|
$("#notify").hide();
|
|
}, 10000);
|
|
}
|
|
|
|
function isHarmfulContent(text, examples, keywords, similarityThreshold = 0.7) {
|
|
var total_score = 0;
|
|
// レーベンシュタイン距離を計算
|
|
function levenshteinDistance(a, b) {
|
|
const dp = Array(a.length + 1).fill().map(() => Array(b.length + 1).fill(0));
|
|
for (let i = 0; i <= a.length; i++) dp[i][0] = i;
|
|
for (let j = 0; j <= b.length; j++) dp[0][j] = j;
|
|
for (let i = 1; i <= a.length; i++) {
|
|
for (let j = 1; j <= b.length; j++) {
|
|
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + cost);
|
|
}
|
|
}
|
|
return dp[a.length][b.length];
|
|
}
|
|
|
|
// 類似度スコアを計算
|
|
function similarityScore(a, b) {
|
|
const distance = levenshteinDistance(a, b);
|
|
const maxLength = Math.max(a.length, b.length);
|
|
return maxLength === 0 ? 0 : 1 - distance / maxLength;
|
|
}
|
|
|
|
// 文脈的な有害性を判定
|
|
function hasHarmfulContext(text, keywords, examples) {
|
|
const normalizedText = text.replace(/[!。!?、]/g, '');
|
|
|
|
let harmfulCharCount = 0;
|
|
let nonHarmfulCharCount = normalizedText.length;
|
|
|
|
const combinedPattern = new RegExp([...keywords, ...examples].join('|'), 'g');
|
|
const matches = normalizedText.match(combinedPattern);
|
|
if (matches) {
|
|
const harmfulText = matches.join('');
|
|
harmfulCharCount += harmfulText.length;
|
|
nonHarmfulCharCount -= harmfulText.length;
|
|
}
|
|
|
|
if (harmfulCharCount > nonHarmfulCharCount || harmfulCharCount > 6) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (hasHarmfulContext(text, keywords, examples)){
|
|
total_score += 1;
|
|
}
|
|
|
|
// 類似度スコアチェック
|
|
const textScore = examples.map(example => similarityScore(text, example));
|
|
const maxScore = Math.max(...textScore);
|
|
|
|
if (maxScore >= similarityThreshold) {
|
|
total_score += 1;
|
|
}
|
|
|
|
if(total_score >= 1){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function check_Harmful_ueuse(text){
|
|
const examples = ["お前なんかいらない", "死んでしまえ", "無能すぎる", "もう関わるな", "お前マジ死ね", "死ねばいいのに", "死んだほうがいいよ", "よく恥ずかしくないね", "社会の迷惑", "存在価値ないだろ", "死んでくれ", "ほんと馬鹿だから", "話しかけてくんな", "口聞かない", "許さないからな", "なんで生きてるの", "早く死ねよ", "凍結されろ", "BANされろ"];
|
|
const keywords = ["死ね", "バカ", "馬鹿", "嫌い", "クズ", "ゴミ", "低能", "無能", "関わるな", "いらない", "消えろ", "殺す", "来るな", "死んで", "死刑", "Fuck", "しね", "下手", "カス", "ますが", "ですが", "ですが何か", "かよ", "荒らし", "黙って", "黙れ", "凍結されろ", "BANされろ"];
|
|
return isHarmfulContent(text, examples, keywords)
|
|
} |