glin-profanity 2.3.3 → 2.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/index.cjs +5590 -0
  2. package/dist/index.d.cts +120 -0
  3. package/dist/index.d.ts +120 -0
  4. package/dist/index.js +5572 -0
  5. package/package.json +13 -12
  6. package/lib/cjs/packages/js/src/core/index.d.ts +0 -4
  7. package/lib/cjs/packages/js/src/core/index.js +0 -55
  8. package/lib/cjs/packages/js/src/core/index.js.map +0 -1
  9. package/lib/cjs/packages/js/src/core/types.d.ts +0 -20
  10. package/lib/cjs/packages/js/src/core/types.js +0 -3
  11. package/lib/cjs/packages/js/src/core/types.js.map +0 -1
  12. package/lib/cjs/packages/js/src/data/dictionary.d.ts +0 -26
  13. package/lib/cjs/packages/js/src/data/dictionary.js +0 -54
  14. package/lib/cjs/packages/js/src/data/dictionary.js.map +0 -1
  15. package/lib/cjs/packages/js/src/filters/Filter.d.ts +0 -32
  16. package/lib/cjs/packages/js/src/filters/Filter.js +0 -246
  17. package/lib/cjs/packages/js/src/filters/Filter.js.map +0 -1
  18. package/lib/cjs/packages/js/src/hooks/useProfanityChecker.d.ts +0 -11
  19. package/lib/cjs/packages/js/src/hooks/useProfanityChecker.js +0 -42
  20. package/lib/cjs/packages/js/src/hooks/useProfanityChecker.js.map +0 -1
  21. package/lib/cjs/packages/js/src/index.d.ts +0 -12
  22. package/lib/cjs/packages/js/src/index.js +0 -24
  23. package/lib/cjs/packages/js/src/index.js.map +0 -1
  24. package/lib/cjs/packages/js/src/nlp/contextAnalyzer.d.ts +0 -35
  25. package/lib/cjs/packages/js/src/nlp/contextAnalyzer.js +0 -203
  26. package/lib/cjs/packages/js/src/nlp/contextAnalyzer.js.map +0 -1
  27. package/lib/cjs/packages/js/src/types/types.d.ts +0 -56
  28. package/lib/cjs/packages/js/src/types/types.js +0 -14
  29. package/lib/cjs/packages/js/src/types/types.js.map +0 -1
  30. package/lib/cjs/shared/dictionaries/Norwegian.json +0 -17
  31. package/lib/cjs/shared/dictionaries/arabic.json +0 -157
  32. package/lib/cjs/shared/dictionaries/chinese.json +0 -298
  33. package/lib/cjs/shared/dictionaries/czech.json +0 -45
  34. package/lib/cjs/shared/dictionaries/danish.json +0 -24
  35. package/lib/cjs/shared/dictionaries/english.json +0 -410
  36. package/lib/cjs/shared/dictionaries/esperanto.json +0 -41
  37. package/lib/cjs/shared/dictionaries/finnish.json +0 -134
  38. package/lib/cjs/shared/dictionaries/french.json +0 -99
  39. package/lib/cjs/shared/dictionaries/german.json +0 -69
  40. package/lib/cjs/shared/dictionaries/globalWhitelist.json +0 -31
  41. package/lib/cjs/shared/dictionaries/hindi.json +0 -100
  42. package/lib/cjs/shared/dictionaries/hungarian.json +0 -100
  43. package/lib/cjs/shared/dictionaries/italian.json +0 -184
  44. package/lib/cjs/shared/dictionaries/japanese.json +0 -189
  45. package/lib/cjs/shared/dictionaries/korean.json +0 -76
  46. package/lib/cjs/shared/dictionaries/persian.json +0 -49
  47. package/lib/cjs/shared/dictionaries/polish.json +0 -57
  48. package/lib/cjs/shared/dictionaries/portuguese.json +0 -78
  49. package/lib/cjs/shared/dictionaries/russian.json +0 -156
  50. package/lib/cjs/shared/dictionaries/spanish.json +0 -72
  51. package/lib/cjs/shared/dictionaries/swedish.json +0 -47
  52. package/lib/cjs/shared/dictionaries/thai.json +0 -35
  53. package/lib/cjs/shared/dictionaries/turkish.json +0 -195
  54. package/lib/esm/packages/js/src/core/index.d.ts +0 -4
  55. package/lib/esm/packages/js/src/core/index.js +0 -47
  56. package/lib/esm/packages/js/src/core/index.js.map +0 -1
  57. package/lib/esm/packages/js/src/core/types.d.ts +0 -20
  58. package/lib/esm/packages/js/src/core/types.js +0 -2
  59. package/lib/esm/packages/js/src/core/types.js.map +0 -1
  60. package/lib/esm/packages/js/src/data/dictionary.d.ts +0 -26
  61. package/lib/esm/packages/js/src/data/dictionary.js +0 -49
  62. package/lib/esm/packages/js/src/data/dictionary.js.map +0 -1
  63. package/lib/esm/packages/js/src/filters/Filter.d.ts +0 -32
  64. package/lib/esm/packages/js/src/filters/Filter.js +0 -240
  65. package/lib/esm/packages/js/src/filters/Filter.js.map +0 -1
  66. package/lib/esm/packages/js/src/hooks/useProfanityChecker.d.ts +0 -11
  67. package/lib/esm/packages/js/src/hooks/useProfanityChecker.js +0 -38
  68. package/lib/esm/packages/js/src/hooks/useProfanityChecker.js.map +0 -1
  69. package/lib/esm/packages/js/src/index.d.ts +0 -12
  70. package/lib/esm/packages/js/src/index.js +0 -15
  71. package/lib/esm/packages/js/src/index.js.map +0 -1
  72. package/lib/esm/packages/js/src/nlp/contextAnalyzer.d.ts +0 -35
  73. package/lib/esm/packages/js/src/nlp/contextAnalyzer.js +0 -199
  74. package/lib/esm/packages/js/src/nlp/contextAnalyzer.js.map +0 -1
  75. package/lib/esm/packages/js/src/types/types.d.ts +0 -56
  76. package/lib/esm/packages/js/src/types/types.js +0 -11
  77. package/lib/esm/packages/js/src/types/types.js.map +0 -1
  78. package/lib/esm/shared/dictionaries/Norwegian.json +0 -17
  79. package/lib/esm/shared/dictionaries/arabic.json +0 -157
  80. package/lib/esm/shared/dictionaries/chinese.json +0 -298
  81. package/lib/esm/shared/dictionaries/czech.json +0 -45
  82. package/lib/esm/shared/dictionaries/danish.json +0 -24
  83. package/lib/esm/shared/dictionaries/english.json +0 -410
  84. package/lib/esm/shared/dictionaries/esperanto.json +0 -41
  85. package/lib/esm/shared/dictionaries/finnish.json +0 -134
  86. package/lib/esm/shared/dictionaries/french.json +0 -99
  87. package/lib/esm/shared/dictionaries/german.json +0 -69
  88. package/lib/esm/shared/dictionaries/globalWhitelist.json +0 -31
  89. package/lib/esm/shared/dictionaries/hindi.json +0 -100
  90. package/lib/esm/shared/dictionaries/hungarian.json +0 -100
  91. package/lib/esm/shared/dictionaries/italian.json +0 -184
  92. package/lib/esm/shared/dictionaries/japanese.json +0 -189
  93. package/lib/esm/shared/dictionaries/korean.json +0 -76
  94. package/lib/esm/shared/dictionaries/persian.json +0 -49
  95. package/lib/esm/shared/dictionaries/polish.json +0 -57
  96. package/lib/esm/shared/dictionaries/portuguese.json +0 -78
  97. package/lib/esm/shared/dictionaries/russian.json +0 -156
  98. package/lib/esm/shared/dictionaries/spanish.json +0 -72
  99. package/lib/esm/shared/dictionaries/swedish.json +0 -47
  100. package/lib/esm/shared/dictionaries/thai.json +0 -35
  101. package/lib/esm/shared/dictionaries/turkish.json +0 -195
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,gCAAgC;AAChC,+BAIgB;AAHd,sGAAA,cAAc,OAAA;AACd,2GAAA,mBAAmB,OAAA;AACnB,qGAAA,aAAa,OAAA;AAQf,iBAAiB;AACjB,mEAAkE;AAAzD,0HAAA,mBAAmB,OAAA;AAE5B,qBAAqB;AACrB,2CAA0C;AAAjC,gGAAA,MAAM,OAAA;AAEf,wCAAwC;AACxC,uCAA8C;AAArC,sGAAA,aAAa,OAAA"}
@@ -1,35 +0,0 @@
1
- import { Language } from '../types/types';
2
- export interface ContextAnalysisResult {
3
- contextScore: number;
4
- reason: string;
5
- isWhitelisted: boolean;
6
- }
7
- export interface ContextConfig {
8
- contextWindow: number;
9
- language: Language;
10
- domainWhitelists?: string[];
11
- }
12
- export declare class ContextAnalyzer {
13
- private contextWindow;
14
- private language;
15
- private domainWhitelists;
16
- constructor(config: ContextConfig);
17
- /**
18
- * Analyzes the context around a profanity match to determine if it should be flagged
19
- */
20
- analyzeContext(text: string, matchWord: string, matchIndex: number): ContextAnalysisResult;
21
- private tokenize;
22
- private findWordIndex;
23
- private checkPhraseContext;
24
- private isDomainWhitelisted;
25
- private calculateSentimentScore;
26
- private generateReason;
27
- /**
28
- * Updates the domain whitelist for this analyzer instance
29
- */
30
- updateDomainWhitelist(newWhitelist: string[]): void;
31
- /**
32
- * Adds words to the domain whitelist
33
- */
34
- addToDomainWhitelist(words: string[]): void;
35
- }
@@ -1,203 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ContextAnalyzer = void 0;
4
- // Positive sentiment indicators
5
- const POSITIVE_INDICATORS = new Set([
6
- 'amazing', 'awesome', 'excellent', 'fantastic', 'great', 'love', 'wonderful',
7
- 'brilliant', 'perfect', 'incredible', 'outstanding', 'superb', 'magnificent',
8
- 'marvelous', 'spectacular', 'phenomenal', 'terrific', 'fabulous', 'divine',
9
- 'best', 'good', 'nice', 'cool', 'sweet', 'rad', 'sick', 'dope', 'fire',
10
- 'lit', 'epic', 'legendary', 'godlike', 'insane', 'crazy', 'wild', 'beast',
11
- 'movie', 'film', 'show', 'song', 'music', 'game', 'book', 'restaurant',
12
- 'food', 'dish', 'meal', 'place', 'spot', 'location', 'experience'
13
- ]);
14
- // Negative sentiment indicators
15
- const NEGATIVE_INDICATORS = new Set([
16
- 'hate', 'terrible', 'awful', 'horrible', 'disgusting', 'pathetic', 'stupid',
17
- 'idiot', 'moron', 'loser', 'worthless', 'useless', 'garbage', 'trash',
18
- 'suck', 'sucks', 'worst', 'bad', 'ugly', 'gross', 'nasty', 'annoying',
19
- 'irritating', 'frustrating', 'disappointing', 'lame', 'weak', 'fail',
20
- 'you', 'your', 'yourself', 'u', 'ur', 'ure', 'youre'
21
- ]);
22
- // Domain-specific positive contexts
23
- const GAMING_POSITIVE = new Set([
24
- 'player', 'gamer', 'team', 'squad', 'clan', 'guild', 'match', 'game',
25
- 'round', 'level', 'boss', 'raid', 'quest', 'achievement', 'skill',
26
- 'build', 'loadout', 'strategy', 'tactic', 'play', 'move', 'combo'
27
- ]);
28
- // Common positive phrases that might contain flagged words
29
- const POSITIVE_PHRASES = new Map([
30
- ['the bomb', 0.9], // "this movie is the bomb"
31
- ['da bomb', 0.9], // slang for "the best"
32
- ['bomb.com', 0.9], // website reference
33
- ['bomb diggity', 0.9], // slang for excellent
34
- ['photo bomb', 0.8], // photography term
35
- ['bath bomb', 0.8], // cosmetic product
36
- ['bomb squad', 0.7], // could be neutral/positive in gaming
37
- ]);
38
- // Negative phrases that should remain flagged
39
- const NEGATIVE_PHRASES = new Map([
40
- ['you are', 0.1], // "you are [profanity]"
41
- ['ur a', 0.1], // "ur a [profanity]"
42
- ['such a', 0.2], // "such a [profanity]"
43
- ['fucking', 0.1], // intensifier, usually negative
44
- ['damn', 0.2], // mild profanity, context dependent
45
- ]);
46
- class ContextAnalyzer {
47
- constructor(config) {
48
- this.contextWindow = config.contextWindow;
49
- this.language = config.language;
50
- this.domainWhitelists = new Set(config.domainWhitelists || []);
51
- }
52
- /**
53
- * Analyzes the context around a profanity match to determine if it should be flagged
54
- */
55
- analyzeContext(text, matchWord, matchIndex) {
56
- const words = this.tokenize(text);
57
- const matchWordIndex = this.findWordIndex(words, matchIndex);
58
- if (matchWordIndex === -1) {
59
- return {
60
- contextScore: 0.5,
61
- reason: 'Could not locate match in tokenized text',
62
- isWhitelisted: false
63
- };
64
- }
65
- // Extract context window
66
- const startIndex = Math.max(0, matchWordIndex - this.contextWindow);
67
- const endIndex = Math.min(words.length, matchWordIndex + this.contextWindow + 1);
68
- const contextWords = words.slice(startIndex, endIndex);
69
- const contextText = contextWords.join(' ').toLowerCase();
70
- // Check for exact phrase matches first
71
- const phraseResult = this.checkPhraseContext(contextText, matchWord);
72
- if (phraseResult) {
73
- return phraseResult;
74
- }
75
- // Check domain-specific whitelists
76
- if (this.isDomainWhitelisted(contextWords, matchWord)) {
77
- return {
78
- contextScore: 0.8,
79
- reason: 'Domain-specific whitelist match',
80
- isWhitelisted: true
81
- };
82
- }
83
- // Perform sentiment analysis
84
- const sentimentScore = this.calculateSentimentScore(contextWords, matchWordIndex - startIndex);
85
- return {
86
- contextScore: sentimentScore,
87
- reason: this.generateReason(sentimentScore, contextWords),
88
- isWhitelisted: false
89
- };
90
- }
91
- tokenize(text) {
92
- // Simple tokenization - split on whitespace and punctuation
93
- return text.toLowerCase()
94
- .replace(/[^\w\s]/g, ' ')
95
- .split(/\s+/)
96
- .filter(word => word.length > 0);
97
- }
98
- findWordIndex(words, charIndex) {
99
- // This is a simplified approach - in production, you'd want more robust mapping
100
- // For now, we'll estimate based on the character position
101
- let currentPos = 0;
102
- for (let i = 0; i < words.length; i++) {
103
- if (currentPos >= charIndex) {
104
- return Math.max(0, i - 1);
105
- }
106
- currentPos += words[i].length + 1; // +1 for space
107
- }
108
- return words.length - 1;
109
- }
110
- checkPhraseContext(contextText, matchWord) {
111
- // Check positive phrases
112
- for (const [phrase, score] of POSITIVE_PHRASES.entries()) {
113
- if (contextText.includes(phrase)) {
114
- return {
115
- contextScore: score,
116
- reason: `Positive phrase detected: "${phrase}"`,
117
- isWhitelisted: true
118
- };
119
- }
120
- }
121
- // Check negative phrases
122
- for (const [phrase, score] of NEGATIVE_PHRASES.entries()) {
123
- if (contextText.includes(phrase)) {
124
- return {
125
- contextScore: score,
126
- reason: `Negative phrase detected: "${phrase}"`,
127
- isWhitelisted: false
128
- };
129
- }
130
- }
131
- return null;
132
- }
133
- isDomainWhitelisted(contextWords, matchWord) {
134
- // Check if any domain whitelist words are present
135
- for (const word of contextWords) {
136
- if (this.domainWhitelists.has(word) || GAMING_POSITIVE.has(word)) {
137
- return true;
138
- }
139
- }
140
- return false;
141
- }
142
- calculateSentimentScore(contextWords, matchPosition) {
143
- let positiveCount = 0;
144
- let negativeCount = 0;
145
- let totalWords = contextWords.length;
146
- // Weight words closer to the match more heavily
147
- for (let i = 0; i < contextWords.length; i++) {
148
- const word = contextWords[i];
149
- const distance = Math.abs(i - matchPosition);
150
- const weight = Math.max(0.1, 1 - (distance * 0.2)); // Closer words have higher weight
151
- if (POSITIVE_INDICATORS.has(word)) {
152
- positiveCount += weight;
153
- }
154
- else if (NEGATIVE_INDICATORS.has(word)) {
155
- negativeCount += weight;
156
- }
157
- }
158
- // Calculate base score
159
- const totalSentiment = positiveCount + negativeCount;
160
- if (totalSentiment === 0) {
161
- return 0.5; // Neutral if no sentiment indicators
162
- }
163
- const rawScore = positiveCount / totalSentiment;
164
- // Apply context-specific adjustments
165
- let adjustedScore = rawScore;
166
- // If there are personal pronouns (you, your), lean towards negative
167
- const hasPersonalPronouns = contextWords.some(word => ['you', 'your', 'u', 'ur'].includes(word));
168
- if (hasPersonalPronouns && rawScore < 0.7) {
169
- adjustedScore *= 0.7; // Reduce score when personal pronouns are present
170
- }
171
- // If there are object/thing references, lean towards positive
172
- const hasObjectReferences = contextWords.some(word => ['movie', 'song', 'game', 'book', 'show', 'this', 'that', 'it'].includes(word));
173
- if (hasObjectReferences && rawScore > 0.3) {
174
- adjustedScore = Math.min(1, adjustedScore * 1.3); // Boost score for object references
175
- }
176
- return Math.max(0, Math.min(1, adjustedScore));
177
- }
178
- generateReason(score, contextWords) {
179
- if (score >= 0.7) {
180
- return 'Positive context detected - likely not profanity';
181
- }
182
- else if (score <= 0.3) {
183
- return 'Negative context detected - likely profanity';
184
- }
185
- else {
186
- return 'Neutral context - uncertain classification';
187
- }
188
- }
189
- /**
190
- * Updates the domain whitelist for this analyzer instance
191
- */
192
- updateDomainWhitelist(newWhitelist) {
193
- this.domainWhitelists = new Set(newWhitelist);
194
- }
195
- /**
196
- * Adds words to the domain whitelist
197
- */
198
- addToDomainWhitelist(words) {
199
- words.forEach(word => this.domainWhitelists.add(word.toLowerCase()));
200
- }
201
- }
202
- exports.ContextAnalyzer = ContextAnalyzer;
203
- //# sourceMappingURL=contextAnalyzer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contextAnalyzer.js","sourceRoot":"","sources":["../../../../../../src/nlp/contextAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- /**
2
- * Type definitions for glin-profanity JavaScript/TypeScript package.
3
- * Unified API that mirrors the Python package structure.
4
- */
5
- /** Severity levels for profanity matches - unified with Python */
6
- export declare enum SeverityLevel {
7
- EXACT = 1,
8
- FUZZY = 2
9
- }
10
- /** Supported languages - unified list with Python */
11
- export type Language = 'arabic' | 'chinese' | 'czech' | 'danish' | 'english' | 'esperanto' | 'finnish' | 'french' | 'german' | 'hindi' | 'hungarian' | 'italian' | 'japanese' | 'korean' | 'norwegian' | 'persian' | 'polish' | 'portuguese' | 'russian' | 'spanish' | 'swedish' | 'thai' | 'turkish';
12
- /** Represents a profanity match in text - unified with Python */
13
- export interface Match {
14
- word: string;
15
- index: number;
16
- severity: SeverityLevel;
17
- contextScore?: number;
18
- reason?: string;
19
- isWhitelisted?: boolean;
20
- }
21
- /** Result of profanity check operation - unified field names */
22
- export interface CheckProfanityResult {
23
- containsProfanity: boolean;
24
- profaneWords: string[];
25
- processedText?: string;
26
- severityMap?: Record<string, SeverityLevel>;
27
- matches?: Match[];
28
- contextScore?: number;
29
- reason?: string;
30
- }
31
- /** Configuration for context-aware filtering - unified with Python */
32
- export interface ContextAwareConfig {
33
- enableContextAware?: boolean;
34
- contextWindow?: number;
35
- confidenceThreshold?: number;
36
- domainWhitelists?: Record<string, string[]>;
37
- }
38
- /** Main filter configuration options - unified with Python */
39
- export interface FilterConfig extends ContextAwareConfig {
40
- languages?: Language[];
41
- allLanguages?: boolean;
42
- caseSensitive?: boolean;
43
- wordBoundaries?: boolean;
44
- customWords?: string[];
45
- replaceWith?: string;
46
- severityLevels?: boolean;
47
- ignoreWords?: string[];
48
- logProfanity?: boolean;
49
- allowObfuscatedMatch?: boolean;
50
- fuzzyToleranceLevel?: number;
51
- }
52
- /** Result with minimum severity filtering */
53
- export interface FilteredProfanityResult {
54
- result: CheckProfanityResult;
55
- filteredWords: string[];
56
- }
@@ -1,14 +0,0 @@
1
- "use strict";
2
- /**
3
- * Type definitions for glin-profanity JavaScript/TypeScript package.
4
- * Unified API that mirrors the Python package structure.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.SeverityLevel = void 0;
8
- /** Severity levels for profanity matches - unified with Python */
9
- var SeverityLevel;
10
- (function (SeverityLevel) {
11
- SeverityLevel[SeverityLevel["EXACT"] = 1] = "EXACT";
12
- SeverityLevel[SeverityLevel["FUZZY"] = 2] = "FUZZY";
13
- })(SeverityLevel || (exports.SeverityLevel = SeverityLevel = {}));
14
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/types/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAAkE;AAClE,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,mDAAS,CAAA;IACT,mDAAS,CAAA;AACX,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB"}
@@ -1,17 +0,0 @@
1
- {
2
- "words": [
3
- "drittsekk",
4
- "faen i helvete",
5
- "fitte",
6
- "jævla",
7
- "kuk",
8
- "kukene",
9
- "kuker",
10
- "nigger",
11
- "pikk",
12
- "sotrør",
13
- "ståpikk",
14
- "ståpikkene",
15
- "ståpikker"
16
- ]
17
- }
@@ -1,157 +0,0 @@
1
- {
2
- "words": [
3
- "سكس",
4
- "طيز",
5
- "شرج",
6
- "لعق",
7
- "لحس",
8
- "تمص",
9
- "بيضان",
10
- "ثدي",
11
- "بز",
12
- "حلمة",
13
- "مفلقسة",
14
- "بظر",
15
- "كس",
16
- "مبادل",
17
- "عاهرة",
18
- "جماع",
19
- "قضيب",
20
- "زب",
21
- "لوطي",
22
- "لواط",
23
- "سحاق",
24
- "اغتصاب",
25
- "خنثي",
26
- "احتلام",
27
- "نيك",
28
- "متناك",
29
- "شرموطة",
30
- "عرص",
31
- "خول",
32
- "قحبة",
33
- "لبوة",
34
- "وسخ",
35
- "علق",
36
- "ناك",
37
- "منيك",
38
- "شرمط",
39
- "قحب",
40
- "شرموط",
41
- "خول",
42
- "هنيك",
43
- "فحل",
44
- "ديوث",
45
- "متناك",
46
- "هايج",
47
- "زبر",
48
- "bdsm",
49
- "زان",
50
- "سادي",
51
- "سادى",
52
- "كسها",
53
- "كسي",
54
- "كسك",
55
- "كسم",
56
- "بنتاك",
57
- "بتناك",
58
- "نيكني",
59
- "ديوث",
60
- "نياك",
61
- "فشاخ",
62
- "فشخ",
63
- "هفشخك",
64
- "شذوذ",
65
- "لواط",
66
- "لوطي",
67
- "لوطى",
68
- "عاهر",
69
- "لحس",
70
- "متع",
71
- "حمام",
72
- "هربط",
73
- "دياث",
74
- "سحاق",
75
- "جنس",
76
- "جنس",
77
- "جوزي",
78
- "مراتي",
79
- "مراتى",
80
- "مرات",
81
- "ورا",
82
- "شعر",
83
- "مشعر",
84
- "اركب",
85
- "فرس",
86
- "جاد",
87
- "منيوك",
88
- "زوبر",
89
- "طياز",
90
- "شراميط",
91
- "فاجر",
92
- "محروم",
93
- "واقف",
94
- "بيحك",
95
- "ممحونة",
96
- "لبن",
97
- "لبو",
98
- "واقف",
99
- "شرقان",
100
- "افضي",
101
- "دهولت",
102
- "bzaz",
103
- "nek",
104
- "nik",
105
- "mtnak",
106
- "zeb",
107
- "zep",
108
- "zobr",
109
- "zopr",
110
- "kos",
111
- "a7a",
112
- "hayg",
113
- "لبوه",
114
- "لبوة",
115
- "لبوت",
116
- "sharma",
117
- "banoty",
118
- "بنوتي",
119
- "بنوتى",
120
- "سلب",
121
- "عايز",
122
- "دكر",
123
- "نتاية",
124
- "نتايه",
125
- "زنج",
126
- "ممحون",
127
- "تعبان",
128
- "اقعد",
129
- "بزاز",
130
- "هيجان",
131
- "سافل",
132
- "مصيهولي",
133
- "هتمص",
134
- "مصي",
135
- "بز",
136
- "hayg",
137
- "كلوت",
138
- "اندر",
139
- "سنتيا",
140
- "بوكسر",
141
- "بتاع",
142
- "مشتهي",
143
- "زبى",
144
- "نكته",
145
- "اتناك",
146
- "nayak",
147
- "nyak",
148
- "neeek",
149
- "اغتصا",
150
- "زب",
151
- "كس",
152
- "بلكيشن",
153
- "كيشن",
154
- "ليسبيان",
155
- "سبيان"
156
- ]
157
- }