팟캐스트에서 브랜드에 대한 모든 언급 찾기
팟캐스트 피드 URL, 시작/종료 날짜 및 브랜드 이름을 입력하면 스크립트는 Deepgram의 빠르고 정확한 음성 인식 API에서 감지한 모든 언급에 대한 보고서를 생성합니다.
시작하기 전에
컴퓨터에 Python이 설치되어 있어야 합니다. 저는 이 글을 쓰는 시점에 Python 3.10을 사용하고 있습니다. 또한 Deepgram API 키get one here가 필요합니다.
새 디렉터리를 만들고 터미널에서 해당 디렉터리로 이동합니다. Create a virtual environment을
python3 -m venv virtual_env
로 활성화하고 source virtual_env/bin/activate
로 활성화합니다. pip install deepgram_sdk asyncio python-dotenv feedparser
로 종속성을 설치합니다.코드 편집기에서 디렉토리를 열고 빈
.env
파일을 만듭니다. Deepgram API 키를 가져와 .env
에 다음 줄을 추가합니다.DEEPGRAM_API_KEY="replace-this-bit-with-your-key"
종속성 및 파일 설정
빈
script.py
파일을 만들고 종속성을 가져옵니다.import os
import json
from datetime import datetime
from time import mktime
import asyncio
from dotenv import load_dotenv
from deepgram import Deepgram
import feedparser
.env
파일에서 값을 로드하고 Deepgram Python SDK를 초기화합니다.load_dotenv()
deepgram = Deepgram(os.getenv('DEEPGRAM_API_KEY'))
마지막으로 스크립트가 실행될 때 자동으로 실행되는
main()
함수를 설정합니다.async def main():
print('Hello world')
if __name__ == '__main__':
asyncio.run(main())
매개변수 정의
main()
함수 위에서 보고서에 대한 설정으로 변수 집합을 만듭니다.podcast_feed = 'http://feeds.codenewbie.org/cnpodcast.xml' # CodeNewbie Podcast
brand_name = 'stellar'
required_confidence = 0.9
start_date = '2022-05-01' # Start of season 20
end_date = '2022-06-27' # End of season 20
Deepgram이 검색 결과를 반환할 때마다 신뢰도는 0과 1 사이입니다.
required_confidence
값은 지정된 신뢰 수준 이상의 결과만 보고합니다.Feedparser로 에피소드 가져오기
print()
함수에서 main()
문을 제거하고 팟캐스트를 가져온 다음 반환된 데이터를 예쁘게 인쇄하여 살펴봅니다.async def main():
rss = feedparser.parse(podcast_feed)
print(json.dumps(rss.entries, indent=2))
사용해 보세요! 터미널에서
python3 script.py
로 파일을 실행하면 각 에피소드에 대한 많은 데이터가 표시됩니다.날짜 범위 내의 에피소드 필터링
Feedparser는 RSS 항목이 게시/업데이트될 때 다양한 날짜 형식을 취하고 이를 표준 형식으로 정규화합니다. 표준화된 출력을 사용하여
main()
함수 바로 아래에 도우미 함수를 만듭니다.def check_if_in_date_range(episode):
date_with_time = datetime.fromtimestamp(mktime(episode.published_parsed))
date = date_with_time.replace(hour=0, minute=0, second=0)
is_not_before_start = date >= datetime.fromisoformat(start_date)
is_not_after_end = date <= datetime.fromisoformat(end_date)
return is_not_before_start and is_not_after_end
이 함수는 에피소드를 가져와 (시간 없이) 날짜를 가져오고
True
와 start_date
사이의 범위에 있으면 end_date
를 반환합니다.print(json.dumps(rss.entries, indent=2))
를 제거하고 다음으로 바꿉니다.episodes = list(filter(check_if_in_date_range, rss.entries))
episodes
배열에는 이제 날짜 범위 내의 에피소드만 포함됩니다.키워드 부스팅 및 검색으로 에피소드 기록
main()
함수 내에서 팟캐스트 미디어 URL을 추출하고 전사 옵션을 설정하고 Deepgram 전사를 요청합니다. 마지막으로 결과에서 검색 결과를 추출합니다.for episode in episodes:
# Get podcast episode URL
source = { 'url': episode.enclosures[0].href }
# Increase chance of hearing brand_name
# Return search results for brand_name
transcription_options = { 'keywords': f'{brand_name}:2', 'search': brand_name }
# Request transcription
response = await deepgram.transcription.prerecorded(source, transcription_options)
# Extract search results
search_results = response['results']['channels'][0]['search'][0]['hits']
신뢰도가 높은 결과만 필터링
아래에 다음 줄
search_results
을 추가하여 필수 신뢰도 미만인 값을 필터링합니다.strong_results = list(filter(lambda x: x['confidence'] > required_confidence, search_results))
멘션 보고서 저장
아래
strong_results
에서 각 에피소드(및 에피소드 내의 각 결과)를 가져와 보고서 파일에 새 줄로 추가합니다.# Define file name
filename = f'{brand_name}-mentions-{start_date}-to-{end_date}.txt'
with open(filename, 'a+') as f:
# Format publish date
pub = datetime.fromtimestamp(mktime(episode.published_parsed))
# Create line per episode
f.write(f'{pub}: "{episode.title}" ({len(strong_results)} mentions)\n')
# Create line per result (indented two spaces)
for result in strong_results:
f.write(f' Mention at {result["start"]}s of \"{result["snippet"]}\"\n')
그게 다야!
python3 script.py
로 스크립트를 다시 실행하고 완료되면 stellar-mentions-2022-05-01-to-2022-06-27.txt
라는 새 파일이 표시되어야 합니다. 여러 보고서를 실행하려는 경우에 적합합니다.이 프로젝트 확장
이 프로젝트는 여러 팟캐스트 에피소드에서 브랜드 언급이 발생하는지 여부와 발생 빈도를 이해하는 데 필요한 정보를 제공해야 합니다. 하나의 요청에서 여러 브랜드를 검색할 수 있도록 하거나 이 논리를 중심으로 UI를 구축하여 더 복잡한 보고서 또는 그래픽 보고서를 만들어 이를 더욱 확장해야 합니다.
여느 때와 마찬가지로 질문이 있으시면 언제든지 연락하시거나 community discussions 에 게시해 주십시오.
최종 코드는 다음과 같습니다.
import asyncio
import os
from datetime import datetime
from time import mktime
from dotenv import load_dotenv
from deepgram import Deepgram
import feedparser
load_dotenv()
deepgram = Deepgram(os.getenv('DEEPGRAM_API_KEY'))
podcast_feed = 'http://feeds.codenewbie.org/cnpodcast.xml'
brand_name = 'stellar'
required_confidence = 0.9
start_date = '2022-05-01'
end_date = '2022-06-27'
async def main():
rss = feedparser.parse(podcast_feed)
episodes = list(filter(check_if_in_date_range, rss.entries))
print(len(episodes))
for episode in episodes:
source = { 'url': episode.enclosures[0].href }
transcription_options = { 'keywords': f'{brand_name}:2', 'search': brand_name }
response = await deepgram.transcription.prerecorded(source, transcription_options)
search_results = response['results']['channels'][0]['search'][0]['hits']
strong_results = list(filter(lambda x: x['confidence'] > required_confidence, search_results))
filename = f'{brand_name}-mentions-{start_date}-to-{end_date}.txt'
with open(filename, 'a+') as f:
pub = datetime.fromtimestamp(mktime(episode.published_parsed))
f.write(f'{pub}: "{episode.title}" ({len(strong_results)} mentions)\n')
for result in strong_results:
f.write(f' Mention at {result["start"]}s of \"{result["snippet"]}\"\n')
def check_if_in_date_range(episode):
date_with_time = datetime.fromtimestamp(mktime(episode.published_parsed))
date = date_with_time.replace(hour=0, minute=0, second=0)
is_not_before_start = date >= datetime.fromisoformat(start_date)
is_not_after_end = date <= datetime.fromisoformat(end_date)
return is_not_before_start and is_not_after_end
if __name__ == '__main__':
asyncio.run(main())
Reference
이 문제에 관하여(팟캐스트에서 브랜드에 대한 모든 언급 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/deepgram/finding-all-mentions-of-your-brand-from-a-podcast-2a6g텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)