2024年11月16日土曜日

韓国語の単語帳 「hanaの韓国語単語 中級編」は2週目から始めよう

韓国語の勉強のお話です。

この記事でお伝えしたいこと

・hanaの韓国語単語 <中級編>ハン検準2級レベル で勉強するときは、2週目から始めましょう


私は韓国語の勉強を始めて半年でハングル検定5級(98点)、1年でハングル検定4級(92点)、1年半でハングル検定3級(81点)に合格しました。

3級を受けるときにいろいろwebで検索したのですが、あまり情報がなくて寂しかったので私の経験談も少しだけ書いておきます。

韓国語の勉強を始めて1年で4級を受験した後、1年勉強してから3級を受けるつもりでしたが、知人に韓国語勉強のテキストをもらったのを機に頑張らないとと思って、事前の想定より半年早く受験の申し込みをしました。

試験前の勉強の進捗はというと、単語帳は半年以上前に1周終わっておりある程度は分かる状況、文法はできる韓国語中級1をやっていたのですが、難しくて心が折れており、試験2週間前まで9課までしか進んでいませんでした。しかも初級2や中級1前半の内容もきちんと身についていない状況。試験前に焦って雑に18課まで進めましたが、Reviewの練習問題の正答率は1割くらいでした。ヨボセヨ韓国語の練習問題の正答率は6~9割でした。

3級の試験を受けた感想は、リスニングが予想より全然聞き取れませんでした。単語の勉強だけはしっかりやっていたのでなんとか筆記で点数を稼いで合格することができました。3級までは60点合格なので完璧にできていなくても合格できる試験だと感じました。

単語の勉強について
5級の時は公式ホームページの語彙リスト、4級はどこかのサイトに載っていた語彙一覧で単語の勉強をしました。

3級の勉強を始めるとき(5級の受験直後)に単語帳を購入しようと思い、少し調べました。トリリンガルのトミさんの動画によると
・音声がある
・例文がある
・赤シートがある
・(カタカナで発音が書いてない)
がよさそうとのことでした。

今適当に検索して出てきたのが下記の画像になります。私は本屋でキクタンとできる韓国語単語集とhanaの韓国語単語を比較して、
・字が大きくてフォントが見やすかった
・今後を見据えた場合により上級のラインナップがある方がよかった
という理由で改訂版hanaの韓国語単語 <初中級編>ハン検3級レベルを購入しました。


購入してよかったことが2点あります。
・見出し語→メイン訳→例文→例文訳の音声mp3が無料でダウンロードできる
・難しい発音にはハングルの読み方(発音記号?)が記載されている

キクタンの音声も聞いてみましたが、私はBGMが無いほうが好みだしキクタンは例文の音声がなかったように思います。

私は単語帳で勉強するのが好きなので楽しく単語を学ぶことができました。
初見で知っている単語が4割くらい、見たことある単語が3割くらい、初めて見る単語が3割くらいの割合でした。
そして初中級が終わるころに(改訂版ではない方の)hanaの韓国語単語 中級編 ハン検準2級レベル を購入しました。

初中級が楽しかったので期待していたのですが、1週目が驚異的にとっつきにくく一瞬で挫折してしまいました。
最初の4日間が家族・人間関係の単語になっているのですが、
・子供、ご子息、一人息子、双子
・人妻、妻、奥さま、妻をめとること、嫁、婿、(弟から見た)兄の妻、(弟から見た)姉の夫、(妹から見た)兄の妻、(妹から見た)姉の夫、(兄から見た)弟の妻、(兄から見た)妹の夫、(姉から見た)弟の妻、(姉から見た)妹の夫、
・妻の実家、既婚女性の実家、夫の実家、嫁ぎ先、母の実家
・宴会、還暦、先祖、子孫、節句、チュソク、祭祀、葬式
など、しょっぱなから全力で心を折りに来ます。

そして5日目が動詞なのですが
・むく、折る、切る、刻む、破る、破裂させる、割る、壊す、剥がす、溶かす、裂く、きざむ
とこれまた全力でつぶしに来ます。

ちなみに2週目以降は普通に勉強しやすい単語が並んでおり、問題なく勉強できます。
なので、最初にも書きましたが、hanaの韓国語単語 <中級編>ハン検準2級レベル で勉強するときは、2週目から始めましょう。

ちなみに中級編は初中級編には用意されていた、見出し語→メイン訳→例文→例文訳の音声が存在せず少し残念でした。

私は「見出し語→メイン訳→例文」と「見出し語→例文訳」をダウンロードして、各ページの「見出し語→例文訳」「見出し語→メイン訳→例文」の順に再生されるようにしています。例文訳を先に聞くのがポイントで、韓国語の例文を先に聞いても難しくて理解できないのですが、先に例文訳を聞いておくとなんとなく韓国語の例文が聞き取れたような気になってうれしいです。

最近はQuizletというアプリでも単語の勉強しています。このアプリは他の学習者様が作ってくださった学習セットを読み込んで使えるのですが、hanaの韓国語単語 中級編の単語学習セットを作ってくださっている方がおり、使わせていただいています。紙の単語帳ではできないシャッフル機能があるので気に入っています。

ハングル検定 準2級は必要な語彙数や慣用句の数が膨大になるし、合格点も上がるのでとても難しく、ハングル検定を受けるのは1年以上先になると思います。自分のペースでこつこつ勉強していけたらと思います。
この記事を読んでくださった優しい方も勉強頑張ってください。成功を祈っています。

2024年4月13日土曜日

pptのvbaについて調べたメモ

 pptのvbaについて調べたメモ


複数のグラフを選択してpptに貼り付けるのが遅いのを改善しようとして色々と調べています。

Excelで12個のグラフを選択して、pptにピクチャで貼り付けるのに4秒かかります。

デバイスに依存しないピクチャ(DIB)は2秒程度で早いのですが、vbaで設定がありません。

SVGも2秒くらいなのですが、今度は貼り付けた後のサイズ変更に時間がかかってしまいます。

SVG形式はメタファイルよりも高速で貼り付けられるし、拡大してもきれいで優秀なのですが、あまりwebに情報が載っていません。PasteSpecialのdatatypeは12 (ppPasteSVG)です。

pptのグラフィック処理が遅いのではないかと考えています。

エクセル側で図としてコピーなども試してみましたが遅かったです。


The Voyage of a neuromancer
PowerPointにはScreenUpdatingがない

https://neuromancer-sho.hatenablog.com/entry/20130308/1362743363


hiroshi akutsuの日記
vba【図としてコピーした画像をpower pointへ貼り付け時に変数に代入】

https://hakoniwahaniwa.hatenablog.com/entry/2014/12/16/101720






2024年4月6日土曜日

Excel vbaで複数グラフを選択する

 Excel vbaで複数グラフを選択する


直接この記事と関係ないけど、下記のvbaのリストがとても良いです。

Kunihito TOBITA Office (飛田国人)

Excel: VBA覚え書き 

http://www.ess.osakafu-u.ac.jp/human/tobita/2018/08/16/excel3/


'これが基本
ActiveSheet.Shapes.Range(Array("グラフ 1", "グラフ 2")).Select

'これはNG
a=Array("グラフ 1", "グラフ 2")
ActiveSheet.Shapes.Range(a).Select


'これはOK
Dim a() As Variant
a=Array("グラフ 1", "グラフ 2")
ActiveSheet.Shapes.Range(a).Select

'これもOK
ReDim a(0 To 1)
a=Array("グラフ 1", "グラフ 2")
ActiveSheet.Shapes.Range(a).Select

'これはNG
aa1 = "グラフ 1,グラフ 2"
buf2 = Split(aa1, ",")
ActiveSheet.Shapes.Range(buf2).Select

'Variant/Variantでないとダメみたい。






追記
詳しい理由はわからないけど配列に代入しておいて、Rangeのカッコの中でJoinしてsplitするといけるっぽい。



2023年7月23日日曜日

vbaでシート一覧とグラフ一覧を取得

 Excel vbaでシート一覧とグラフ一覧を取得する

実行するとアクティブシートの1行目にラベル、2行目以降に各シートのグラフ名を列挙します。


A列 Sheet Name シート名

B列 Graph Name グラフ名(カンマ区切り)

C列 paste1.txt(全部同じ)

D列 PageDown 1(全部同じ)

E列 Comment シート名


Sub sht_get()
   
    Dim dt, cnt, buf, sh, g
    cnt = 2
   
    ReDim dt(1 To Worksheets.Count + 1, 1 To 5)
   
    dt(1, 1) = "Sheet Name"
    dt(1, 2) = "Graph Name"
    dt(1, 3) = "Paste"
    dt(1, 4) = "PageDown"
    dt(1, 5) = "Comment"
   
    For Each sh In ThisWorkbook.Sheets
        If sh.ChartObjects.Count = 0 Then GoTo skip_syori
       
        dt(cnt, 1) = sh.Name
       
        buf = ""
        For Each g In sh.ChartObjects
            buf = buf & "," & g.Name
        Next g
        dt(cnt, 2) = Mid(buf, 2)
        dt(cnt, 3) = "paste1.txt"
        dt(cnt, 4) = 1
        dt(cnt, 5) = sh.Name
        cnt = cnt + 1
skip_syori:

    Next sh
    Cells(1, 1).Resize(cnt - 1, 5) = dt
   
End Sub

2023年6月24日土曜日

pythonで近似式とR2を求める

Pythonを使って下記を行います。

・二次元配列(100x2)の値を間引く
・二次元配列(10x2)の値を第0列の値で昇順にソート
・二次元配列をx,yの散布図と考えて、1次、2次、5次の多項式近似で近似曲線を作成
・各近似式の決定係数R2を求める

numpyが必要

import numpy as np

arr = np.random.rand(100, 2)    # 100 x 2の配列の乱数
arr2=arr[::10]                  #1/10に間引く
arr3 = np.sort(arr2,axis=0)     #0番の列で昇順にソート

coe1 = np.polyfit(arr3[:,0], arr3[:,1], 1)  #1次多項式
coe2 = np.polyfit(arr3[:,0], arr3[:,1], 2)  #2次多項式
coe5 = np.polyfit(arr3[:,0], arr3[:,1], 5)  #3次多項式

fit1=np.poly1d(coe1)(arr3[:,0])
fit2=np.poly1d(coe2)(arr3[:,0])
fit5=np.poly1d(coe5)(arr3[:,0])

r2_1 = np.corrcoef(arr3[:,1], fit1)[0,1] ** 2   #yの値同士を入れる
r2_2 = np.corrcoef(arr3[:,1], fit2)[0,1] ** 2   #yの値同士を入れる
r2_5 = np.corrcoef(arr3[:,1], fit5)[0,1] ** 2   #yの値同士を入れる

print(r2_1,r2_2,r2_5)

 

=========

Pythonを使ってグラフを読み取ります。作りかけです。

・グラフの枠の座標を取得する
・グラフの枠内を白く塗りつぶす
・軸の数字と座標を認識する
グラフデータの読み込みや画像の座標からグラフの数値への変換は未実装です。

pillow、pyocr、Opencv、Tesseract、numpyが必要です。


import sys
import os
from PIL import Image
import pyocr
import cv2
import numpy as np

#Tesseractのインストール場所をOSに教える
tesseract_path = "C:\Program Files\Tesseract-OCR"
if tesseract_path not in os.environ["PATH"].split(os.pathsep):
    os.environ["PATH"] += os.pathsep + tesseract_path

#OCRエンジンを取得する
tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("OCRエンジンが指定されていません")
    sys.exit(1)
else:
    tool = tools[0]

# 8ビット1チャンネルのグレースケールとして画像を読み込む
img_org = cv2.imread("sample.bmp", cv2.IMREAD_GRAYSCALE)
img=cv2.bitwise_not(img_org)    # 白黒反転 輪郭検出で白色の枠を検出するため、外枠が白になるように白黒反転

#輪郭検出 cv2.RETR_EXTERNAL 最外部の輪郭のみ検出 CHAIN_APPROX_TC89_L1:直線近似できる部分の輪郭点を省略
#contours[輪郭番号][点の番号][0][X座標, Y座標]
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_TC89_L1 )

# 画像表示用に入力画像をカラーデータに変換する
img_disp = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
img_disp_org = cv2.cvtColor(img_org, cv2.COLOR_GRAY2BGR)

# 輪郭の点の描画
#contours[輪郭番号][点の番号][0][X座標, Y座標]
for i, contour in enumerate(contours):
    # 輪郭を描画 画像名、輪郭座標、輪郭番号、色、線幅(-1は塗りつぶし)
    cv2.drawContours(img_disp, contours, i, (255, 0, 0), 2)

    # 傾いていない外接する矩形領域
    x,y,w,h = cv2.boundingRect(contour)
    if w>100:       #幅100より大きい(グラフの外枠)のとき、orgのほうは白く塗りつぶし
        cv2.rectangle(img_disp,(x,y),(x+w-1,y+h-1),(0,255,0),2)
        cv2.rectangle(img_disp_org,(x,y),(x+w-1,y+h-1),(255,255,255),-1)    #白く塗りつぶす
       
#fileに書いて後ろでもう一度読み込んでいる。絶対もっと良い方法がある
cv2.imwrite('output.png', img_disp_org)

#画像の読み込み
file_path = "sample.bmp"
img = Image.open('output.png')      #ここはいつか改善する
img2 = img_disp_org                 #グラフ部を塗りつぶした画像

#文字と座標を読み取る
box_builder = pyocr.builders.WordBoxBuilder(tesseract_layout=6)     #6が最適かは不明
text_position = tool.image_to_string(img,lang="eng",builder=box_builder)

#取得した座標と文字を出力、画像に枠を書き込む
for res in text_position:
    print(res.content)
    print(res.position)
    cv2.rectangle(img2,res.position[0],res.position[1],(0,0,255),2)

#検出した軸ラベルの座標からx,y軸それぞれのグラフ範囲を推定する処理を入れる 未
#別途グラフの系列データを認識して、グラフ範囲に変換する 未

#四角を書き込んだ画像を表示
cv2.imshow("image",img2)
cv2.waitKey(0)

2023年4月16日日曜日

VBAで系列を追加する jpegをpptスライドに貼る pythonでs2pファイルをde-embedする

Chat-GPTに教えてもらいました。あいつ凄いな。


vbaで散布図に系列を追加する
系列の順序を指定したい場合、非表示の系列(.IsFiltered = True)があるとPlotOrderが機能しないので.Formulaプロパティで順序を指定することにしました。Formulaプロパティの操作はエラーがおきやすいので注意。withを使ったほうが速いらしいのでwithを入れました。

Sub AddNewSeries3()
    Dim myChart As Chart
    Set myChart = ActiveSheet.ChartObjects("Chart 1").Chart
   
    Dim mySeries As Series
    Set mySeries = myChart.SeriesCollection.NewSeries
   
    With mySeries
        'Name,X,Y,Order
        .Formula = "=SERIES(Sheet3!$A$1,Sheet3!$A$2:$A$6,Sheet3!$B$2:$B$6,3)"
       
        'set the marker type and size
        .MarkerStyle = xlMarkerStyleCircle
        .MarkerSize = 8
       
        'set the line type and color
        .ChartType = xlXYScatterLines
        .Format.Line.Weight = 2
        .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
    End With
End Sub


pptでフォルダ内のjpegファイルをpptの各ページに貼り付ける。

Sub InsertImagesToSlides()
    Dim imagePath As String
    Dim imageFiles() As String
    Dim i As Integer
    Dim slide As Slide
    Dim slideIndex As Integer
   
    ' Specify the path to the folder containing the JPEG files
    imagePath = "C:\Path\To\Your\Images\Folder\"
   
    ' Collect all JPEG files in the specified folder
    imageFiles = GetFilesInFolder(imagePath, "*.jpg")
   
    ' Create a new PowerPoint presentation
    Dim pptApp As Object
    Set pptApp = CreateObject("PowerPoint.Application")
    pptApp.Visible = True
    Dim pptPres As Object
    Set pptPres = pptApp.Presentations.Add
   
    ' Loop through the image files and insert each one into a new slide
    slideIndex = 1
    For i = LBound(imageFiles) To UBound(imageFiles)
        Set slide = pptPres.Slides.Add(slideIndex, 12) ' 12 represents the slide layout (blank slide)
        slide.Shapes.AddPicture FileName:=imagePath & imageFiles(i), LinkToFile:=msoFalse, SaveWithDocument:=msoTrue, Left:=0, Top:=0, Width:=pptPres.PageSetup.SlideWidth, Height:=pptPres.PageSetup.SlideHeight
        slideIndex = slideIndex + 1
    Next i
   
    ' Clean up
    Set slide = Nothing
    Set pptPres = Nothing
    Set pptApp = Nothing
   
    MsgBox "Images inserted successfully!"
End Sub

Function GetFilesInFolder(folderPath As String, filePattern As String) As String()
    Dim files() As String
    Dim file As String
    Dim i As Integer
   
    file = Dir(folderPath & filePattern)
    i = 0
   
    Do While file <> ""
        ReDim Preserve files(i)
        files(i) = file
        i = i + 1
        file = Dir
    Loop
   
    GetFilesInFolder = files
End Function


pythonでサブフォルダ[rename]内のすべてのファイルについて、ファイル名先頭の数字(アンダーバー区切り)を3桁で0埋めしてリネーム

import os, re

def main():
    for f in os.listdir("resize"):
 
        ff=f.split('_',1)
        ff[0]='{0:03d}'.format(int(ff[0]))
        f2="_".join(ff)
        of = "resize/" + f
        nf2="resize/" + f2
        try:
            os.rename(of, nf2)
            print(of, " >> ", nf2)
        except:
            print(u"リネーム前と後が同じです。", nf2)

if __name__ == '__main__':
    main()



pythonでtouchstone file をde-embedする。
ドラッグアンドドロップや引数での処理に対応したいけどpathの処理がうまく理解できず、残課題です。

import skrf as rf
from os import path

mypath =path.dirname(__file__)
evb1 = rf.Network(path.join(mypath,"a.s2p"))
evb2 = rf.Network(path.join(mypath,"b.s2p"))
dut = rf.Network(path.join(mypath,"dut.s2p"))

# evb2.renumber([0,1],[1,0])

evb1_intp=evb1.interpolate(dut.frequency)
evb2_intp=evb2.interpolate(dut.frequency)

dut_de=evb1_intp.inv ** dut ** evb2_intp.inv

dut_de.write_touchstone(path.join(mypath,"dut_de-embed3.s2p"))

2023年3月3日金曜日

VBAでcsvファイルを開く

 VBAでcsvファイルを開く

QueryTableで開くと速いという記事を見つけたので試してみた。別に早くない。区切り文字が決まっているならline inputで1行づつ読んでsplitして配列に入れて貼り付けるほうが早い。


sub open_csv()

    Dim msh, fname

    fname ="C:\local\test.csv"

    msh ="test"

    Sheets.Add(After:=Sheets(Sheets.Count)).Name  = msh

    Set ws = Sheets(msh)

    Set qt = ws.QueryTables.Add(Connection:="TEXT;" & fname, Destination:=ws.Range("A1")) 

    With qt

        .TextFilePlatform = 932          ' 文字コードを指定

        .TextFileParseType = xlDelimited ' 区切り文字の形式

        .TextFileCommaDelimiter = True   ' カンマ区切り

        .RefreshStyle = xlOverwriteCells ' セルに上書き

        .Refresh                         ' データを表示

        .Delete                          ' CSV との接続を解除

    End With


End Sub