i-vector를 추출하기위해 kaldi 라이브러리를 사용하던중 ark파일에 접근하는 방법을 설명한다.

 

kaldiio 의 load_ark

설치 : pip install kaldiio

from kaldiio import load_ark

with open("~.ark") as fd:
    for key, numpy_array in load_ark(fd):
        print(key, numpy_array)

key에는 utt-id, numpy_array에는 array값이 추출되는것을 확인할 수 있다.


이 라이브러리를 알기전에 open()으로 인코딩 값을 설정하여 추출하였는데

f= open("~.ark","r",encoding="utf-8")
t = f.read()
f.close()

인코딩이 안되는 경우가 있었다.

 

참고 : https://www.wenyanet.com/opensource/ko/607aa478cab8002036617fe4.html

Pandas의 DataFrame을 확인할 때 다 보고싶은데 안보이는 경우가 있다.

import pandas as pd
pd.set_option('display.max_row', rows_num)
pd.set_option('display.max_columns', cols_num)

위 설정을 해주면 출력되는 데이터프레임 개수를 조절 할 수 있다.

rows_num, cols_num에 원하는 숫자를 넣는다.

 

 

Meta문자

  • ^ : 문자열 시작 패턴 : ^abc : abc로 시작하는 문자열
  • $ : 문자열 끝 패턴 : abc& : abc로 끝나는 문자열
  • * : 0개 이상 : \d* : 숫자 0개 이상
  • + : 1개 이상 : \d+ : 숫자 1개 이상
  • . : 문자 1개 : . : 아무 문자 1개
  • .* : 문자 1개 이상 : .* : 아무 문자 1개 이상
  • ? : 문자 1개 or 0개 : a? : a 1개 or 0개
  • {n} : 문자 n개 : \d{3} : 숫자 3개
  • {a,b} : 문자 a개 이상, b개 이하 : \d{1,5} : 숫자 1개 이상 5개 이하
  • \ : 특수 문자 표시 : *? : *?
  • [] : 리스트 중 일치 : [A-Z]{2} : A~Z 중 2개
  • [^] : 리스트 제외 : [^TAB] : 탭을 제외한 모든 글자
  • | : 또는 (or) : A|B : A와 B

 

특수문자

  • \d : 숫자 1개
  • \D : 숫자 이외 문자 1개
  • \s : 공백이나 탭 1개
  • \S : 공백이나 탭 이외 문자 1개
  • \w : 알파벳 1개
  • \W : 알파벳 이외의 문자 1개
  • \A : 문자열 처음과 매치
  • \Z : 문자열 끝과 매치
  • \b : 단어 구분자
  • \B : \b와 반대

 

함수

  • math() : 문자열의 처음부터 정규식과 매치되는지 조사
  • search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사
  • findall() : 정규식과 매치되는 모든 문자열을 리스트로 반환
  • finditer() : 정규식과 매치되는 모든 문자열을 반복 가능한 객채로 반환

 

컴파일 옵션 ex) re.compile("a.b", re.DOTALL), or re.compile("a.b", re.S)

  • DOTALL(S) - . 이 줄바꿈 문자를 포함하여 모든 문자와 매치할 수 있도록 한다.
  • IGNORECASE(I) - 대소문자에 관계없이 매치할 수 있도록 한다.
  • MULTILINE(M) - 여러줄과 매치할 수 있도록 한다. (^, $ 메타문자의 사용과 관계가 있는 옵션이다)
  • VERBOSE(X) - verbose 모드를 사용할 수 있도록 한다. (정규식을 보기 편하게 만들수 있고 주석등을 사용할 수 있게된다.)

 

 

 

python 코드 https://github.com/simbj9074/Python-re/blob/main/re.ipynb

[참고 문헌] 점프 투 파이썬, "https://wikidocs.net/1669"

 

주피터 노트북을 사용하면서 많은 함수를 사용하고 있는데,

 

가끔 파라미터에 뭐가 있는지 궁금한 경우가 있다.

 

그럴때 바로 함수의 설명을 볼 수있다.

바로 함수의 () 안에 커서를 두고 shift + tap 을 누르면 위 사진과 같이 함수의 설명이 나온다.

 

tqdm은 for문의 진행상황을 알 수 있다.

 

사용방법도 간단하다.

 

반복문의 in 뒤에 tqdm으로 감싸주면 끝

import numpy as np
from tqdm import tqdm

nums = np.arange(100) # 1~100 까지 array
total = 0
for num in tqdm(nums):
    total += num
print(total)

반복문 처리가 오래걸릴때 사용하면 진행 상황을 볼 수있어서 안 답답하다.

 

파이썬을 이용해서 폴더내의 모든 파일을 빠르게 이동, 복사, 파일명 변경하기


  • 파일 복사, 이동 :: shutil 라이브러리
import shutil
import os

# dir1 -> dir2 로 파일 Move
dir1 = "/파일 주소1/"
dir2 = "/파일 주소2/"

files = os.listdir(dir1) # dir1의 파일 목록을 list로 받는다.

for file in files:
    shutil.move(dir1 + file, dir2 + file) # 하나씩 순서대로 이동

shutil.copy 를 쓰게되면 파일을 복사할 수 있다.


  • 파일 삭제 :: os 라이브러리
import os

dir = "경로/폴더명"
files = os.listdir(dir)
for file in files:
	os.remove(dir+file,dir+"삭제할파일명")

  • 파일명 변경 :: os 라이브러리
import os

dir = "경로/폴더명"
files = os.listdir(dir)
for file in files:
	os.rename(dir+file,dir+"변경할파일명")

1. txt파일 읽기

fp = open("파일.txt","r", encoding='utf-8-sig') # 파일.txt를 읽는다.
text = fp.read() # txt 내용을 text변수에 담는다.

text변수에 내용을담아서 수정해서 다시 저장할 수 있다.

 

2. txt파일 저장

fp2 = open("new.txt",'w',encoding='utf-8-sig') # 빈 txt 파일 생성
fp2.write(text) # 빈 txt 파일에 내용 작성
fp2.close()

.wav 파일을 읽고 병합하고 저장하는 방법

 

1. wav파일 읽기

import soundfile as sf
import numpy as np
y, sr = sf.read("wav파일 위치") # y : signal, sr : samplerate

2. y 값 병합

x = np.array([[0,0]])
x = np.concatenate((x, y),axis=0) # 2차원의 값 병합

x에 다른 wav파일의 y값을 넣어서 여러 wav를 병합할 수 있다.

 

3. 병합된 데이터 wav파일로 저장

sf.write("저장위치", x, sr)

이렇게 하면 wav파일을 저장할 수 있다.

 

읽고 저장하는 과정에서 파라미터를 변경하여 다른 형태로 저장이 가능하다.

예를 들어 samplerate, dtype, 등 여러 wav에 관련된 속성들을 바꿔서 저장할 수 있다.

 

+ Recent posts