How to remove duplicate words with Unicode characters from free‑text in TypeScript

1 Answer

0 votes
/**
 * Removes duplicate words from a free-text string containing Unicode characters.
 * Preserves word order and the case of the first occurrence.
 *
 * @param input - The input string containing text and punctuation.
 * @returns Space-separated unique words.
 */
function removeDuplicateWords(input: string): string {
  if (!input || !input.trim()) {
    return '';
  }

  // 1. \p{L} matches Unicode letters, \p{N} matches digits.
  //    'g' flag finds all occurrences, 'u' flag enables Unicode mode.
  const wordPattern: RegExp = /[\p{L}\p{N}_]+/gu;
  const matches: RegExpMatchArray | null = input.match(wordPattern);

  if (!matches) {
    return '';
  }

  // 2. Set for O(1) duplicate tracking.
  const seenWords: Set<string> = new Set<string>();
  const uniqueWords: string[] = [];

  // 3. Keep first occurrence while normalizing case for check.
  for (const word of matches) {
    const lowerWord: string = word.toLowerCase();
    
    if (!seenWords.has(lowerWord)) {
      seenWords.add(lowerWord);
      uniqueWords.push(word);
    }
  }

  // 4. Join unique words with a single space.
  return uniqueWords.join(' ');
}

// Main
const input: string = "Hello! こんにちは,  ,hello こんにちは Bună ziua; Γεια σας Bună ziua *HELLO* Γεια σας";

const result: string = removeDuplicateWords(input);

console.log(result);



/*
run:

Hello こんにちは Bună ziua Γεια σας

*/

 



answered Aug 4 by avibootz

Related questions

...