Retext 및 Node.js로 비포괄적 언어 감지

개인적인 언어 사용은 학습과 적응의 여정이며, 이는 귀하가 아직 깨닫지 못한 용어가 포괄적이지 않거나 잠재적으로 다른 사람에게 모독적일 수 있는 용어로 확장됩니다. 잠재적으로 문제가 될 수 있는 언어를 감지하고 지적함으로써 다른 사람을 더 배려하고 친절하게 대할 수 있습니다.

alex은 텍스트 또는 마크다운 파일을 가져오고 retext-equality retext-profanities 을 사용하여 개선을 위한 제안을 강조 표시하는 멋진 명령줄 도구입니다. 알렉스는 성별에 따른 작업 제목, 성별에 따른 속담, 유능한 언어, 거들먹거리거나 편협한 언어, 욕설 등을 확인합니다.

이 짧은 자습서에서는 제안에 대한 Deepgram 성적표utterances를 확인하기 위해 의존하는 retext 라이브러리alex를 사용하는 방법을 다룹니다.

시작하기 전에



시작하기 전에 Deepgram API 키get one here가 필요합니다.

새 디렉터리를 만들고 코드 편집기에서 열고 터미널에서 해당 디렉터리로 이동한 다음 package.json 를 실행하여 새 npm init -y 파일을 만들고 종속 항목을 설치합니다.

npm install retext retext-equality retext-profanities vfile-reporter-json @deepgram/sdk

retext 패키지에는 ES6 프로젝트가 필요합니다. Babel과 같은 도구를 사용하여 코드를 컴파일할 필요 없이 이 작업을 수행하는 가장 쉬운 방법은 package.json 파일에 다음 속성을 추가하는 것입니다.

"type": "module"


코드 편집기에서 index.js 파일을 만들고 엽니다.

Deepgram으로 성적표 생성



Deepgram Node.js는 CommonJS 모듈이지만 기본 내보내기를 통해 가져올 수 있습니다. 이 때문에 가져오기는 CommonJS에서 다음과 같이 진행됩니다.

const { Deepgram } = require('@deepgram/sdk')


ES6에서 이에 대해 (DG는 두 용도에서 동일하다면 무엇이든 될 수 있습니다.)

import DG from '@deepgram/sdk'
const { Deepgram } = DG


그런 다음 성적표를 생성합니다. 여기에서는 시연을 위해 alex 샘플 구를 읽는 내 음성 녹음을 사용하고 있습니다.

const deepgram = new Deepgram('YOUR_DEEPGRAM_API_KEY')
const url = 'http://lws.io/static/inconsiderate.mp3'
const { results } = await deepgram.transcription.preRecorded({ url }, { utterances: true })
console.log(results)


utterances 기능이 사용 중이므로 각 발화(음성 구문)가 발화된 시점과 함께 배열이 제공됩니다.

그것을 밖으로 시험해보십시오! node index.js 로 파일을 실행하면 터미널에 페이로드가 표시되어야 합니다. 작동하는지 확인한 후 console.log() 를 제거합니다.

언어 검사기 설정


index.js 의 맨 위에 retext를 설정하는 데 필요한 종속성을 포함하고 여기에서 발견된 문제를 보고합니다.

import { reporterJson } from 'vfile-reporter-json'
import { retext } from 'retext'
import retextProfanities from 'retext-profanities'
import retextEquality from 'retext-equality'


그런 다음 재사용 가능한 다음 함수를 만듭니다.

async function checkText(text) {
    const file = await retext()
        .use(retextProfanities)
        .use(retextEquality)
        .process(text)
    const outcome = JSON.parse(reporterJson(file))
    const warnings = outcome[0].messages.map(r => r.reason)
    return warnings
}


이 함수는 지정된 플러그인(여기서는 retextProfanitiesretextEquality )을 통해 제공된 텍스트를 처리합니다. outcome는 실제로 상당히 많은 양의 데이터입니다.

{
    reason: '`man` may be insensitive, use `people`, `persons`, `folks` instead',
    line: 1,
    column: 9,
    position: {
        start: { line: 1, column: 9, offset: 8 },
        end: { line: 1, column: 12, offset: 11 }
    },
    ruleId: 'gals-man',
    source: 'retext-equality',
    fatal: false,
    stack: null
},


재사용 가능warnings 함수의 checkText 맵은 reason만 추출하고 이러한 문자열의 배열을 반환합니다. 임시로 다음 줄을 추가하여 사용해 보세요.

const testSuggestions = await checkText('He is a butthead.')
console.log(testSuggestions)


결과는 다음과 같아야 합니다.

[
    'Don’t use `butthead`, it’s profane',
    '`He` may be insensitive, use `They`, `It` instead'
]


작동하는지 확인한 후 console.log() 를 제거합니다.

각 발화의 언어 확인



Deepgram 성적표를 생성하는 아래의 index.js 파일에 다음을 추가하십시오.

let suggestions = []

for(let utterance of results.utterances) {
    const { transcript, start } = utterance

    // Get array of warning strings
    let warnings = await checkText(transcript)

    // Alter strings to be objects including the utterance transcript and start time
    warnings = warnings.map(warning => ({ warning, transcript, start }))

    // Append to end of array
    suggestions = [...suggestions, ...warnings]
}

console.log(suggestions)


터미널에는 두 가지retext 플러그인이 제공하는 모든 제안이 표시되어야 합니다.



마무리



이 전체 스니펫(아래)은 사용법 및 비포괄적 언어 패턴을 식별하고 변경하기 시작하기에 좋은 곳입니다. retext 플러그인에 뉘앙스가 부족하고 때때로 거짓 양성 일치에 대한 제안을 한다는 사실을 곧 알게 될 것입니다. 제안을 "반드시 해야 할 일"로 생각하지 말고 고려하고 생각해야 할 점을 지적하십시오.

가정, 진부한 표현, 수동태, 반복, 지나치게 복잡한 단어 등을 처리하는 것을 포함하여 텍스트를 처리할 수 있는 전체 호스트other retext plugins가 있습니다. 즐기다!

import { reporterJson } from 'vfile-reporter-json'
import { retext } from 'retext'
import retextProfanities from 'retext-profanities'
import retextEquality from 'retext-equality'
import DG from '@deepgram/sdk'
const { Deepgram } = DG
const deepgram = new Deepgram(process.env.DG_KEY)

const url = 'http://lws.io/static/inconsiderate.mp3'
const { results } = await deepgram.transcription.preRecorded({ url }, { utterances: true })

async function checkText(text) {
    const file = await retext()
        .use(retextProfanities)
        .use(retextEquality)
        .process(text)
    const outcome = JSON.parse(reporterJson(file))
    const warnings = outcome[0].messages.map(r => r.reason)
    return warnings
}

let suggestions = []
for(let utterance of results.utterances) {
    const { transcript, start } = utterance
    let warnings = await checkText(transcript)
    warnings = warnings.map(warning => ({ warning, transcript, start }))
    suggestions = [...suggestions, ...warnings]
}

console.log(suggestions)

좋은 웹페이지 즐겨찾기