@yogesh0333/yogiway-prompt
Version:
Free & Open Source Prompt Optimization Library - Save 30-50% on AI API costs. Multi-language, multi-platform support.
237 lines (236 loc) • 7.81 kB
JavaScript
"use strict";
/**
* Multi-Language Optimization Rules
* Language-specific optimization patterns and rules
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectLanguage = detectLanguage;
exports.getLanguageRules = getLanguageRules;
exports.optimizeForLanguage = optimizeForLanguage;
/**
* Language-specific optimization rules
*/
const LANGUAGE_RULES = {
en: {
redundantPhrases: [
/\bplease\s+note\s+that\b/gi,
/\bit\s+is\s+important\s+to\s+note\s+that\b/gi,
/\bas\s+you\s+can\s+see\b/gi,
/\bin\s+order\s+to\b/gi,
/\bfor\s+the\s+purpose\s+of\b/gi,
],
verbosePatterns: [
[/\bwith\s+regard\s+to\b/gi, 'about'],
[/\bat\s+the\s+present\s+time\b/gi, 'now'],
[/\bin\s+the\s+event\s+that\b/gi, 'if'],
],
fillerWords: /\b(um|uh|like|you know|I mean)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
es: {
redundantPhrases: [
/\bpor\s+favor\s+tenga\s+en\s+cuenta\s+que\b/gi,
/\bes\s+importante\s+notar\s+que\b/gi,
/\bcomo\s+puede\s+ver\b/gi,
],
verbosePatterns: [
[/\bcon\s+respecto\s+a\b/gi, 'sobre'],
[/\ben\s+este\s+momento\b/gi, 'ahora'],
[/\ben\s+el\s+caso\s+de\s+que\b/gi, 'si'],
],
fillerWords: /\b(eh|este|o sea|bueno)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
fr: {
redundantPhrases: [
/\bveuillez\s+noter\s+que\b/gi,
/\bil\s+est\s+important\s+de\s+noter\s+que\b/gi,
/\bcomme\s+vous\s+pouvez\s+le\s+voir\b/gi,
],
verbosePatterns: [
[/\ben\s+ce\s+qui\s+concerne\b/gi, 'sur'],
[/\bà\s+l'heure\s+actuelle\b/gi, 'maintenant'],
[/\bdans\s+le\s+cas\s+où\b/gi, 'si'],
],
fillerWords: /\b(euh|alors|ben|voilà)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
de: {
redundantPhrases: [
/\bbitte\s+beachten\s+Sie\s+dass\b/gi,
/\bes\s+ist\s+wichtig\s+zu\s+bemerken\s+dass\b/gi,
],
verbosePatterns: [
[/\bbezüglich\b/gi, 'über'],
[/\bzu\s+diesem\s+Zeitpunkt\b/gi, 'jetzt'],
[/\bfalls\b/gi, 'wenn'],
],
fillerWords: /\b(äh|ähm|also)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
it: {
redundantPhrases: [
/\bper\s+favore\s+notare\s+che\b/gi,
/\bè\s+importante\s+notare\s+che\b/gi,
],
verbosePatterns: [
[/\bper\s+quanto\s+riguarda\b/gi, 'su'],
[/\bin\s+questo\s+momento\b/gi, 'ora'],
],
fillerWords: /\b(ehm|allora|cioè)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
pt: {
redundantPhrases: [
/\bpor\s+favor\s+note\s+que\b/gi,
/\bé\s+importante\s+notar\s+que\b/gi,
],
verbosePatterns: [
[/\bcom\s+relação\s+a\b/gi, 'sobre'],
[/\bneste\s+momento\b/gi, 'agora'],
],
fillerWords: /\b(é|tipo|assim)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
ru: {
redundantPhrases: [
/\bпожалуйста\s+обратите\s+внимание\s+что\b/gi,
/\bважно\s+отметить\s+что\b/gi,
],
verbosePatterns: [
[/\bотносительно\b/gi, 'о'],
[/\bв\s+данный\s+момент\b/gi, 'сейчас'],
],
fillerWords: /\b(э|ээ|ну|вот)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
zh: {
redundantPhrases: [
/\b请注意\b/gi,
/\b重要的是要注意\b/gi,
],
verbosePatterns: [
[/\b关于\b/gi, ''],
[/\b目前\b/gi, '现在'],
],
fillerWords: /\b(嗯|那个|就是)\b/gi,
whitespaceRules: {
compressMultipleSpaces: false, // Chinese doesn't use spaces
compressNewlines: true,
},
},
ja: {
redundantPhrases: [
/\bご注意ください\b/gi,
/\b重要な点は\b/gi,
],
verbosePatterns: [
[/\bに関して\b/gi, 'について'],
[/\b現時点で\b/gi, '今'],
],
fillerWords: /\b(えー|あの|その)\b/gi,
whitespaceRules: {
compressMultipleSpaces: false, // Japanese doesn't use spaces
compressNewlines: true,
},
},
ko: {
redundantPhrases: [
/\b참고하시기\s+바랍니다\b/gi,
/\b중요한\s+점은\b/gi,
],
verbosePatterns: [
[/\b관련하여\b/gi, ''],
[/\b현재\s+시점에서\b/gi, '지금'],
],
fillerWords: /\b(음|그|어)\b/gi,
whitespaceRules: {
compressMultipleSpaces: true,
compressNewlines: true,
},
},
};
/**
* Detect language from text (simple heuristic)
*/
function detectLanguage(text) {
// Simple character-based detection
if (/[\u4e00-\u9fff]/.test(text))
return 'zh';
if (/[\u3040-\u309f\u30a0-\u30ff]/.test(text))
return 'ja';
if (/[\uac00-\ud7a3]/.test(text))
return 'ko';
if (/[\u0400-\u04ff]/.test(text))
return 'ru';
// Word-based detection for European languages
const words = text.toLowerCase().split(/\s+/);
const esWords = ['el', 'la', 'de', 'que', 'y', 'en', 'un', 'es', 'se', 'no'];
const frWords = ['le', 'de', 'et', 'à', 'un', 'il', 'être', 'et', 'en', 'avoir'];
const deWords = ['der', 'die', 'und', 'in', 'den', 'von', 'zu', 'das', 'mit', 'sich'];
const itWords = ['il', 'di', 'che', 'e', 'la', 'per', 'un', 'in', 'una', 'è'];
const ptWords = ['o', 'de', 'e', 'do', 'da', 'em', 'um', 'para', 'é', 'com'];
if (words.some(w => esWords.includes(w)))
return 'es';
if (words.some(w => frWords.includes(w)))
return 'fr';
if (words.some(w => deWords.includes(w)))
return 'de';
if (words.some(w => itWords.includes(w)))
return 'it';
if (words.some(w => ptWords.includes(w)))
return 'pt';
return 'en'; // Default to English
}
/**
* Get optimization rules for a language
*/
function getLanguageRules(language) {
return LANGUAGE_RULES[language] || LANGUAGE_RULES.en;
}
/**
* Apply language-specific optimization
*/
function optimizeForLanguage(text, language = 'en') {
const rules = getLanguageRules(language);
let optimized = text;
// Remove redundant phrases
rules.redundantPhrases.forEach(pattern => {
optimized = optimized.replace(pattern, '');
});
// Replace verbose patterns
rules.verbosePatterns.forEach(([pattern, replacement]) => {
optimized = optimized.replace(pattern, replacement);
});
// Remove filler words
optimized = optimized.replace(rules.fillerWords, '');
// Apply whitespace rules
if (rules.whitespaceRules.compressMultipleSpaces) {
optimized = optimized.replace(/\s+/g, ' ');
}
if (rules.whitespaceRules.compressNewlines) {
optimized = optimized.replace(/\n\s*\n\s*\n/g, '\n\n');
}
return optimized.trim();
}