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
}
이 함수는 지정된 플러그인(여기서는
retextProfanities
및 retextEquality
)을 통해 제공된 텍스트를 처리합니다. 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)
Reference
이 문제에 관하여(Retext 및 Node.js로 비포괄적 언어 감지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/deepgram/detect-non-inclusive-language-with-retext-and-nodejs-b46텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)