<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Python | You Look Too Cool</title>
	<atom:link href="https://stabucky.com/wp/archives/tag/python/feed" rel="self" type="application/rss+xml" />
	<link>https://stabucky.com/wp</link>
	<description>ゆるくつくる stabuckyのブログ</description>
	<lastBuildDate>Mon, 22 Dec 2025 03:38:20 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://stabucky.com/wp/wp-content/uploads/2024/05/cropped-stabucky-32x32.png</url>
	<title>Python | You Look Too Cool</title>
	<link>https://stabucky.com/wp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>iPhoneのジャーナルをエクスポートする方法</title>
		<link>https://stabucky.com/wp/archives/19898</link>
					<comments>https://stabucky.com/wp/archives/19898#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Fri, 09 May 2025 03:51:09 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Markdown]]></category>
		<category><![CDATA[Obsidian]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ジャーナル]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=19898</guid>

					<description><![CDATA[iPhoneのジャーナルを日記として利用していたのですがなぜかMacでは使えないのでエクスポートして別のツールを使うことにしました。 目次 エクスポート展開後の内容マークダウンに変換 エクスポート エクスポートの手順は下 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>iPhoneのジャーナルを日記として利用していたのですがなぜかMacでは使えないのでエクスポートして別のツールを使うことにしました。</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">エクスポート</a></li><li><a href="#toc2" tabindex="0">展開後の内容</a></li><li><a href="#toc3" tabindex="0">マークダウンに変換</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">エクスポート</span></h2>
<p>エクスポートの手順は下のとおりです。<br />
（iOS18.4.1で確認しました。）</p>
<p>iPhoneの設定アプリを開きます。<br />
一番下のアプリを選択します。<br />
「ジャーナル」を選択します。（さ行にありました）<br />
「すべてのジャーナルエントリーを書き出す」を選択します。<br />
「iPhoneのパスコードを入力」と出るのでパスコードを入力します。<br />
「書き出しますか？」と出るので「書き出す」を選択します。<br />
「書き出し中」と出るので少し待ちます。<br />
保存先を選択します。（iCloud Driveのルートにしました。）<br />
保存を押します。<br />
AppleJournalEntries.zipとして保存されます。</p>
<h2><span id="toc2">展開後の内容</span></h2>
<p>ファイルを展開するとindex.htmlとEntriesフォルダとResourcesフォルダになります。<br />
Entriesに本文がHTML形式で保存されています。<br />
index.htmlが目次になるのでそのままでも利用できます。（ただしResourcesにある画像ファイルがHEIC形式なのでブラウザで開いても見えません。）</p>
<h2><span id="toc3">マークダウンに変換</span></h2>
<p>Obsidianで使いたいので各ファイルをマークダウンに変換します。<br />
Pythonを使いました。<br />
使う場合は<br />
base_folder_path_input = &#8220;/xxxxx/AppleJournalEntries&#8221;<br />
の部分をZIPを展開したフォルダに書き換えてください。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;height:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span><br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span><br />
<span style="color: #ff7700;font-weight:bold;">from</span> bs4 <span style="color: #ff7700;font-weight:bold;">import</span> BeautifulSoup<br />
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>.<span style="color: black;">parse</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> convert_html_to_markdown_text<span style="color: black;">&#40;</span>html_content<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;&quot;<br />
&nbsp; &nbsp; HTMLコンテンツから画像タグとその他のHTMLタグを除去し、テキストを抽出する。<br />
&nbsp; &nbsp; &quot;&quot;&quot;</span><br />
&nbsp; &nbsp; soup <span style="color: #66cc66;">=</span> BeautifulSoup<span style="color: black;">&#40;</span>html_content<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;html.parser&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> img_tag <span style="color: #ff7700;font-weight:bold;">in</span> soup.<span style="color: black;">find_all</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;img&quot;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; img_tag.<span style="color: black;">decompose</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; text <span style="color: #66cc66;">=</span> soup.<span style="color: black;">get_text</span><span style="color: black;">&#40;</span>separator<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">,</span> strip<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; text <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">sub</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\s</span>*<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #66cc66;">,</span> text<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> text<br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> process_html_files_in_folder_simple<span style="color: black;">&#40;</span>source_folder_path<span style="color: #66cc66;">,</span> output_folder_full_path<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;&quot;&quot;<br />
&nbsp; &nbsp; 指定されたフォルダ内のHTMLファイルを処理し、指定された出力フォルダにMarkdown形式で保存する。<br />
&nbsp; &nbsp; エラーハンドリングや重複チェックは簡略化されている。<br />
&nbsp; &nbsp; - yyyy-mm-dd_文字列.html -&gt; yyyy-mm-dd_文字列.md<br />
&nbsp; &nbsp; - yyyy-mm-dd.html &nbsp; &nbsp; &nbsp;-&gt; yyyy-mm-dd.md<br />
&nbsp; &nbsp; 重複するファイル名は上書きされる。<br />
&nbsp; &nbsp; &quot;&quot;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #dc143c;">os</span>.<span style="color: black;">makedirs</span><span style="color: black;">&#40;</span>output_folder_full_path<span style="color: #66cc66;">,</span> exist_ok<span style="color: #66cc66;">=</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>f<span style="color: #483d8b;">&quot;出力先フォルダ: '{output_folder_full_path}'&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>f<span style="color: #483d8b;">&quot;'{source_folder_path}' 内のHTMLファイルを処理しています...&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; processed_files_count <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> encoded_filename <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">listdir</span><span style="color: black;">&#40;</span>source_folder_path<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; filename <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">urllib</span>.<span style="color: black;">parse</span>.<span style="color: black;">unquote</span><span style="color: black;">&#40;</span>encoded_filename<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> filename.<span style="color: black;">lower</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">endswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;.html&quot;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; match <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">match</span><span style="color: black;">&#40;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r<span style="color: #483d8b;">&quot;(<span style="color: #000099; font-weight: bold;">\d</span>{4}-<span style="color: #000099; font-weight: bold;">\d</span>{2}-<span style="color: #000099; font-weight: bold;">\d</span>{2})(?:_(.+))?<span style="color: #000099; font-weight: bold;">\.</span>html$&quot;</span><span style="color: #66cc66;">,</span> filename<span style="color: #66cc66;">,</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">IGNORECASE</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> match:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; date_part <span style="color: #66cc66;">=</span> match.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string_part_content <span style="color: #66cc66;">=</span> match.<span style="color: black;">group</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> string_part_content:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; base_md_name_without_ext <span style="color: #66cc66;">=</span> f<span style="color: #483d8b;">&quot;{date_part}_{string_part_content}&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; base_md_name_without_ext <span style="color: #66cc66;">=</span> date_part<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; md_filename <span style="color: #66cc66;">=</span> base_md_name_without_ext + <span style="color: #483d8b;">&quot;.md&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; md_filepath <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>output_folder_full_path<span style="color: #66cc66;">,</span> md_filename<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html_filepath <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>source_folder_path<span style="color: #66cc66;">,</span> encoded_filename<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>html_filepath<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;r&quot;</span><span style="color: #66cc66;">,</span> encoding<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f_html:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html_content <span style="color: #66cc66;">=</span> f_html.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; markdown_text <span style="color: #66cc66;">=</span> convert_html_to_markdown_text<span style="color: black;">&#40;</span>html_content<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>md_filepath<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;w&quot;</span><span style="color: #66cc66;">,</span> encoding<span style="color: #66cc66;">=</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f_md:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f_md.<span style="color: black;">write</span><span style="color: black;">&#40;</span>markdown_text<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>f<span style="color: #483d8b;">&quot;変換完了: '{filename}' -&gt; '{md_filename}'&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; processed_files_count +<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">pass</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>f<span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>処理完了。 {processed_files_count} ファイルを変換しました。&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>f<span style="color: #483d8b;">&quot;変換されたファイルは '{output_folder_full_path}' に保存されています。&quot;</span><span style="color: black;">&#41;</span><br />
<br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;__main__&quot;</span>:<br />
&nbsp; &nbsp; <span style="color: #808080; font-style: italic;"># ユーザーが指定したベースフォルダパス</span><br />
&nbsp; &nbsp; base_folder_path_input <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;/xxxxx/AppleJournalEntries&quot;</span><br />
&nbsp; &nbsp; base_folder_path <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">expanduser</span><span style="color: black;">&#40;</span>base_folder_path_input<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; input_entries_folder <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>base_folder_path<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Entries&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; output_markdown_folder <span style="color: #66cc66;">=</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>base_folder_path<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;converted_markdown_files&quot;</span><span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; process_html_files_in_folder_simple<span style="color: black;">&#40;</span>input_entries_folder<span style="color: #66cc66;">,</span> output_markdown_folder<span style="color: black;">&#41;</span></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/19898/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>とにかく動かすPAD &#8211; Pythonのライブラリを使う方法</title>
		<link>https://stabucky.com/wp/archives/19380</link>
					<comments>https://stabucky.com/wp/archives/19380#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Thu, 06 Feb 2025 23:43:27 +0000</pubDate>
				<category><![CDATA[マイクロソフト]]></category>
		<category><![CDATA[PAD]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ライブラリ]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=19380</guid>

					<description><![CDATA[目次 Pythonのバージョンを知る方法使えるライブラリを知る方法ライブラリを使う方法使えるライブラリ一覧 Pythonのバージョンを知る方法 【Pythonスクリプトの実行】でPythonが使えます。 Pythonのバ [&#8230;]]]></description>
										<content:encoded><![CDATA[
  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">Pythonのバージョンを知る方法</a></li><li><a href="#toc2" tabindex="0">使えるライブラリを知る方法</a></li><li><a href="#toc3" tabindex="0">ライブラリを使う方法</a></li><li><a href="#toc4" tabindex="0">使えるライブラリ一覧</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">Pythonのバージョンを知る方法</span></h2>
<p>【Pythonスクリプトの実行】でPythonが使えます。<br />
Pythonのバージョンは「Python3.4」とします。<br />
次のようにするとPythonの正確なバージョンが分かります。</p>
<p>【Pythonスクリプトの実行】<br />
実行するPythonスクリプト：<br />
import sys<br />
print(sys.version)</p>
<p>結果<br />
3.4.1 (3.4.1.1000)<br />
[.NETFramework,Version=v4.6.2 on .NET Framework 4.8.4515.0 (64-bit)]</p>
<h2><span id="toc2">使えるライブラリを知る方法</span></h2>
<p>次のようにすると使えるライブラリ（モジュール）が分かります。</p>
<p>【Pythonスクリプトの実行】<br />
実行するPythonスクリプト：<br />
import sys<br />
print(sys.builtin_module_names)</p>
<p>結果<br />
(&#8216;_ast&#8217;, &#8216;_bisect&#8217;, &#8216;_bz2&#8217;, &#8216;_codecs&#8217;, &#8216;_collections&#8217;, &#8216;_csv&#8217;, &#8216;_ctypes&#8217;, &#8216;_ctypes_test&#8217;, &#8216;_datetime&#8217;, &#8216;_functools&#8217;, &#8216;_heapq&#8217;, &#8216;_imp&#8217;, &#8216;_io&#8217;, &#8216;_locale&#8217;, &#8216;_md5&#8217;, &#8216;_multiprocessing&#8217;, &#8216;_opcode&#8217;, &#8216;_operator&#8217;, &#8216;_overlapped&#8217;, &#8216;_random&#8217;, &#8216;_sha1&#8217;, &#8216;_sha256&#8217;, &#8216;_sha512&#8217;, &#8216;_socket&#8217;, &#8216;_sre&#8217;, &#8216;_ssl&#8217;, &#8216;_string&#8217;, &#8216;_struct&#8217;, &#8216;_thread&#8217;, &#8216;_warnings&#8217;, &#8216;_weakref&#8217;, &#8216;_winapi&#8217;, &#8216;array&#8217;, &#8216;atexit&#8217;, &#8216;audioop&#8217;, &#8216;binascii&#8217;, &#8216;builtins&#8217;, &#8216;clr&#8217;, &#8216;cmath&#8217;, &#8216;errno&#8217;, &#8216;faulthandler&#8217;, &#8216;gc&#8217;, &#8216;itertools&#8217;, &#8216;marshal&#8217;, &#8216;math&#8217;, &#8216;mmap&#8217;, &#8216;msvcrt&#8217;, &#8216;nt&#8217;, &#8216;pyexpat&#8217;, &#8216;pyexpat.errors&#8217;, &#8216;pyexpat.model&#8217;, &#8216;re&#8217;, &#8216;select&#8217;, &#8216;signal&#8217;, &#8216;sys&#8217;, &#8216;time&#8217;, &#8216;unicodedata&#8217;, &#8216;winreg&#8217;, &#8216;winsound&#8217;, &#8216;xxsubtype&#8217;, &#8216;zipimport&#8217;, &#8216;zlib&#8217;)</p>
<h2><span id="toc3">ライブラリを使う方法</span></h2>
<p>例えば「_datetime」であれば次のように使います。※「datetime」でなく「_datetime」とします。<br />
現在時刻が返ります。</p>
<p>【Pythonスクリプトの実行】<br />
実行するPythonスクリプト：<br />
import _datetime<br />
print(_datetime.datetime.now())</p>
<p>結果<br />
2025-02-06 20:34:19.300000</p>
<p>1週間前の時刻が返ります。</p>
<p>【Pythonスクリプトの実行】<br />
実行するPythonスクリプト：<br />
import _datetime<br />
print(_datetime.datetime.now() &#8211; _datetime.timedelta(days=7))<br />
あるいは<br />
from _datetime import datetime, timedelta<br />
print(datetime.now() &#8211; timedelta(days=7))</p>
<p>結果<br />
2025-01-30 20:34:19.300000</p>
<h2><span id="toc4">使えるライブラリ一覧</span></h2>
<p>・_ast: 抽象構文木（AST）を操作するためのモジュール。<br />
・_bisect: 二分探索アルゴリズムを提供するモジュール。<br />
・_bz2: BZ2圧縮アルゴリズムを使用してファイルの圧縮と解凍を行うモジュール。<br />
・_codecs: エンコーディングとデコーディングを提供するモジュール。<br />
・_collections: 追加のコレクションデータ型を提供するモジュール。<br />
・_csv: CSVファイルの読み書きを行うためのモジュール。<br />
・_ctypes: C言語のライブラリをPythonから呼び出すためのモジュール。<br />
・_ctypes_test: ctypesのテスト用モジュール。<br />
・_datetime: 日付と時刻を扱うためのクラスを提供するモジュール。<br />
・_functools: 高階関数や関数操作ツールを提供するモジュール。<br />
・_heapq: ヒープ（優先順位キュー）操作を提供するモジュール。<br />
・_imp: 古いインポート関数のインターフェイスを提供するモジュール (Python 3.4以降非推奨)。<br />
・_io: バイナリおよびテキストのI/O操作を提供するモジュール。<br />
・_locale: ロケール（地域化）に依存した操作を行うためのモジュール。<br />
・_md5: MD5メッセージダイジェストアルゴリズムを提供するモジュール。<br />
・_multiprocessing: 並列計算を行うためのマルチプロセシングサポートを提供するモジュール。<br />
・_opcode: Pythonバイトコード命令の定義。<br />
・_operator: 関数形式の演算子を提供するモジュール。<br />
・_overlapped: Windowsの非同期I/Oをサポートするモジュール。<br />
・_random: 乱数生成器関連の低レベルモジュール。<br />
・_sha1: SHA1メッセージダイジェストアルゴリズムを提供するモジュール。<br />
・_sha256: SHA256メッセージダイジェストアルゴリズムを提供するモジュール。<br />
・_sha512: SHA512メッセージダイジェストアルゴリズムを提供するモジュール。<br />
・_socket: ソケット通信のためのモジュール。<br />
・_sre: 正規表現エンジンの低レベル実装。<br />
・_ssl: SSL/TLS通信をサポートするモジュール。<br />
・_string: 内部文字列操作の支援モジュール。<br />
・_struct: バイト列とPythonの値の間の変換を行うモジュール。<br />
・_thread: 低レベルのスレッド操作を提供するモジュール。<br />
・_warnings: 警告制御を行うモジュール。<br />
・_weakref: 弱参照をサポートするためのモジュール。<br />
・_winapi: WindowsのAPI呼び出しをサポートするモジュール。<br />
・array: 基本的な配列操作を提供するモジュール。<br />
・atexit: プログラム終了時に実行する関数を登録するためのモジュール。<br />
・audioop: オーディオ操作のためのモジュール。<br />
・binascii: バイナリデータとASCIIテキスト間の変換を行うモジュール。<br />
・builtins: すべてのPythonプログラムで自動的にインポートされる組み込み関数や例外を含むモジュール。<br />
・cmath: 複素数数学関数を提供するモジュール。<br />
・errno: エラーナンバー定義を提供するモジュール。<br />
・faulthandler: スタックトレースをダンプすることでクラッシュレポートを支援するモジュール。<br />
・gc: ガベージコレクション操作を提供するモジュール。<br />
・itertools: 高効率なループ処理を行うためのイテレータ生成関数を提供するモジュール。<br />
・marshal: Pythonオブジェクトのシリアライズ/デシリアライズを行うモジュール（Pythonの内部使用目的）。<br />
・math: 標準的な数学関数を提供するモジュール。<br />
・mmap: メモリマップファイルのサポートを提供するモジュール。<br />
・msvcrt: Windows向けのMicrosoft Visual C runtimeライブラリ操作を提供するモジュール。<br />
・nt: NTまたはWindowsに固有の機能を提供するモジュール。<br />
・pyexpat: XMLを解析するための高速なパーサーを提供するモジュール。<br />
・pyexpat.errors: pyexpatモジュールで使用するエラーコードを含むサブモジュール。<br />
・pyexpat.model: pyexpatモジュールのデータモデル。<br />
・re: 正規表現操作を提供するモジュール。<br />
・select: I/O多重化を提供するモジュール。<br />
・signal: 非同期イベントを処理するためのシグナル操作を提供するモジュール。<br />
・sys: 組み込みインタープリタ機能やシステム固有のパラメータと関数を提供するモジュール。<br />
・time: 時刻操作を提供するモジュール。<br />
・unicodedata: Unicodeデータベースへのアクセスを提供するモジュール。<br />
・winreg: Windowsレジストリ操作を提供するモジュール。<br />
・winsound: Windowsの音声操作を行うためのモジュール。<br />
・xxsubtype: 拡張型のデモンストレーションを行うためのモジュール。<br />
・zipimport: ZIPアーカイブファイルからのモジュールのインポートをサポートするモジュール。<br />
・zlib: 圧縮アルゴリズムzlibを使用するためのモジュール。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/19380/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>配色の基礎知識：補色の理論とプログラミングによる実装方法</title>
		<link>https://stabucky.com/wp/archives/19235</link>
					<comments>https://stabucky.com/wp/archives/19235#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Mon, 06 Jan 2025 03:44:05 +0000</pubDate>
				<category><![CDATA[豆知識]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[色]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=19235</guid>

					<description><![CDATA[目次 補色とは計算方法サンプルコード 補色とは 「ある色を引き立たせるためには何色を使えばよいか」と考えます。 これを補色と言います。 赤と緑、青と黄がこの関係にあります。 Wikipediaには次の通り説明があります。 [&#8230;]]]></description>
										<content:encoded><![CDATA[
  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">補色とは</a></li><li><a href="#toc2" tabindex="0">計算方法</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">補色とは</span></h2>
<p>「ある色を引き立たせるためには何色を使えばよいか」と考えます。<br />
これを補色と言います。<br />
赤と緑、青と黄がこの関係にあります。</p>
<p>Wikipediaには次の通り説明があります。</p>
<blockquote><p>補色とは、色相環で正反対に位置する関係の色の組合せ<br />
補色同士の色の組み合わせは、互いの色を引き立て合う相乗効果</p></blockquote>
<h2><span id="toc2">計算方法</span></h2>
<p>補色は計算で求められます。</p>

<a rel="noopener" href="https://helpx.adobe.com/jp/illustrator/using/adjusting-colors.html" title="https://helpx.adobe.com/jp/illustrator/using/adjusting-colors.html" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fhelpx.adobe.com%2Fjp%2Fillustrator%2Fusing%2Fadjusting-colors.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://helpx.adobe.com/jp/illustrator/using/adjusting-colors.html</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://helpx.adobe.com/jp/illustrator/using/adjusting-colors.html" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">helpx.adobe.com</div></div></div></div></a>
<blockquote><p>カラーの各構成要素を、選択したカラーの最大の RGB 値と最小の RGB 値の合計を元にして、新しい値に変更します。現在のカラーの RGB 値のうち最大と最小の値が合計され、その値から各構成要素の値を引いて、新しい RGB 値が生成されます。例えば、RGB 値がレッド 102、グリーン 153、ブルー 51 であるカラーを選択したとします。この場合、まず最大値である 153 と最小値である 51 を合計して 204 という値が算出されます。この値から既存のカラーの RGB 値がそれぞれ差し引かれます。つまり、新しいレッドの値は 204 &#8211; 102（現在のレッドの値）= 102、グリーンの値は 204 &#8211; 153（現在のグリーンの値）= 51、ブルーの値は 204 &#8211; 51（現在のブルーの値）= 153 となり、新しい補色の RGB 値が生成されます。</p></blockquote>
<h2><span id="toc3">サンプルコード</span></h2>
<p>Pythonで関数にしてみました。</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">def complementary_color(r, g, b):<br />
&nbsp; &nbsp; t = max(r, g, b) + min(r, g, b)<br />
&nbsp; &nbsp; return tuple(max(0, min(255, t - x)) for x in (r, g, b))</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/19235/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AutomatorでPythonを繰り返し実行する方法</title>
		<link>https://stabucky.com/wp/archives/18841</link>
					<comments>https://stabucky.com/wp/archives/18841#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Tue, 22 Oct 2024 13:38:59 +0000</pubDate>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Automator]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=18841</guid>

					<description><![CDATA[Macで、Pythonを繰り返し実行する場合、Cronを使うのが定番のようですが、設定が難しく面倒です。 Automatorを使うと、もっと簡単に設定できます。 また、最短1分おきでなく、処理が終わり次第、次の処理が実行 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Macで、Pythonを繰り返し実行する場合、Cronを使うのが定番のようですが、設定が難しく面倒です。<br />
Automatorを使うと、もっと簡単に設定できます。<br />
また、最短1分おきでなく、処理が終わり次第、次の処理が実行させることもできます。</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">準備</a></li><li><a href="#toc2" tabindex="0">設定</a><ol><li><a href="#toc3" tabindex="0">シェルスクリプトを実行</a></li><li><a href="#toc4" tabindex="0">ループ</a></li></ol></li><li><a href="#toc5" tabindex="0">使用方法</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">準備</span></h2>
<p>Automatorを起動。<br />
ワークフローを選択。</p>
<h2><span id="toc2">設定</span></h2>
<h3><span id="toc3">シェルスクリプトを実行</span></h3>
<p>アクションとして「シェルスクリプトを実行」を選択。<br />
次の通りセット。<br />
シェル：/bin/bash<br />
入力の引き渡し方法：stdinへ<br />
本文：<br />
cd /Users/xxxxx/myfolder<br />
/Library/yyyyy/python3 zzzzz.py</p>
<p>本文については次のようにする。<br />
「cd /Users/xxxxx/myfolder」で作業フォルダ（フルパス）を指定。<br />
次の行にPythonのコマンド（フルパス）とPythonファイルを指定。<br />
Pythonのコマンドはターミナルで「$ whitch python3」とすると表示される。</p>
<h3><span id="toc4">ループ</span></h3>
<p>アクションとして「ループ」を選択。<br />
次の通りセット。<br />
ループして自動的に停止<br />
後に自動的に停止：時間（時間と単位）を任意で。<br />
オリジナルの入力を使用</p>
<p>指定した時間が経過するまで繰り返す。</p>
<p><img fetchpriority="high" decoding="async" src="https://stabucky.com/wp/wp-content/uploads/2024/10/automator.png" alt="" width="740" height="301" class="aligncenter size-full wp-image-18842" srcset="https://stabucky.com/wp/wp-content/uploads/2024/10/automator.png 740w, https://stabucky.com/wp/wp-content/uploads/2024/10/automator-500x203.png 500w" sizes="(max-width: 740px) 100vw, 740px" /></p>
<h2><span id="toc5">使用方法</span></h2>
<p>保存。<br />
右上の実行ボタンをクリック。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/18841/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>とにかく動かすPAD − スクリプトを使って複雑なロジックをシンプルに</title>
		<link>https://stabucky.com/wp/archives/18472</link>
					<comments>https://stabucky.com/wp/archives/18472#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Thu, 29 Aug 2024 10:37:19 +0000</pubDate>
				<category><![CDATA[マイクロソフト]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PAD]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=18472</guid>

					<description><![CDATA[Power Automate Desktop（PAD）で複雑な関数を定義する場合、相当長いフローになってしまいます。 一方、PADはローコードツールですが、Pythonなどのコード（スクリプト）を使うこともできます。 通 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Power Automate Desktop（PAD）で複雑な関数を定義する場合、相当長いフローになってしまいます。<br />
一方、PADはローコードツールですが、Pythonなどのコード（スクリプト）を使うこともできます。<br />
通常の操作はPADで行い、複雑なロジックが必要な部分はスクリプトを使うことで、フローをシンプルにすることができます。<br />
【Pythonスクリプトの実行】と【JavaScriptの実行】を使う方法についてまとめます。<span id="more-18472"></span></p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">基本的な使い方</a></li><li><a href="#toc2" tabindex="0">使用例</a><ol><li><a href="#toc3" tabindex="0">やりたいこと</a></li><li><a href="#toc4" tabindex="0">Pythonの場合のフロー</a></li><li><a href="#toc5" tabindex="0">JavaScriptの場合のフロー</a></li></ol></li></ol>
    </div>
  </div>

<h2><span id="toc1">基本的な使い方</span></h2>
<p>「引数」は「%ThisNumber%」のように%で挟んでコード（スクリプト）内に書きます。<br />
コード自体は通常通り書いて、結果をresultのような変数に代入し、これを出力します。<br />
出力はPythonならば「print」、JavaScriptならば「WScript.Echo」を使います。<br />
戻り値は「生成された変数」として指定して、以降のアクションに渡します。</p>
<h2><span id="toc2">使用例</span></h2>
<h3><span id="toc3">やりたいこと</span></h3>
<p>ThisNumberとして整数を与えると1からThisNumberまでの合計を求めてTotalとして返す。</p>
<h3><span id="toc4">Pythonの場合のフロー</span></h3>
<p>【変数の設定】アクション<br />
変数：ThisNumber<br />
値：100</p>
<p>【Pythonスクリプトの実行】アクション<br />
実行するPythonスクリプト：</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">end = %ThisNumber%<br />
result = sum(range(1, end + 1))<br />
print(result)</div></div>
<p>Pythonのバージョン：Python 3.4<br />
生成された変数：Total</p>
<p>【メッセージを表示】<br />
表示するメッセージ：%Total%</p>
<h3><span id="toc5">JavaScriptの場合のフロー</span></h3>
<p>【変数の設定】アクション<br />
変数：ThisNumber<br />
値：100</p>
<p>【JavaScriptの実行】<br />
実行するJavaScript：</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">end = %ThisNumber%<br />
result = 0<br />
for(i = 1; i &lt;= end; i ++){<br />
&nbsp; result += i;<br />
}<br />
WScript.Echo(result);</div></div>
<p>生成された変数：Total</p>
<p>【メッセージを表示】<br />
表示するメッセージ：%Total%</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/18472/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>周期ゼミの周期が素数であることをシミュレート</title>
		<link>https://stabucky.com/wp/archives/16633</link>
					<comments>https://stabucky.com/wp/archives/16633#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Wed, 20 Mar 2024 07:32:29 +0000</pubDate>
				<category><![CDATA[豆知識]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[セミ]]></category>
		<category><![CDATA[数学]]></category>
		<category><![CDATA[素数]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=16633</guid>

					<description><![CDATA[セミは幼虫の期間が数年に及びます。 私が子供の頃は「セミは幼虫として7年間、土の中にいて、成虫になり1週間で死ぬ」と言われていました。 実際は、日本にいるセミは幼虫期間はもっと短く、成虫期間はもっと長いそうです。 世界に [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>セミは幼虫の期間が数年に及びます。<br />
私が子供の頃は「セミは幼虫として7年間、土の中にいて、成虫になり1週間で死ぬ」と言われていました。<br />
実際は、日本にいるセミは幼虫期間はもっと短く、成虫期間はもっと長いそうです。<br />
世界にはきっちりした周期で発生するセミがいるそうです。<br />
アメリカには13年周期のセミ、17年周期のセミがいて、今年はそれらの周期が221年ぶりに重なり、大量発生するのではないかと言われています。<span id="more-16633"></span></p>

<a rel="noopener" href="https://natgeo.nikkeibp.co.jp/atcl/news/24/031800155/" title="221年ぶりに周期ゼミの2集団が同時に大量発生、江戸時代以来" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://natgeo.nikkeibp.co.jp/atcl/news/24/031800155/ph_thumb.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">221年ぶりに周期ゼミの2集団が同時に大量発生、江戸時代以来</div><div class="blogcard-snippet external-blogcard-snippet">2024年の4月下旬から6月にかけて、米国の南東部から中西部で、200年の時を超えて大自然の交響曲が奏でられる。周期ゼミの2つの集団が221年ぶりに同時に姿を現しはじめるのだ。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://natgeo.nikkeibp.co.jp/atcl/news/24/031800155/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">natgeo.nikkeibp.co.jp</div></div></div></div></a>
<p>本当に周期が素数になるのか、シミュレートしてみました。</p>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">前提</a></li><li><a href="#toc2" tabindex="0">結果</a></li><li><a href="#toc3" tabindex="0">コード</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">前提</span></h2>
<p>周期が3年から20年までの周期ゼミがそれぞれ10000匹いたとします。<br />
各年に発生したセミの合計50000匹を超えると割合に応じて50000匹まで減るものとします。<br />
逆に50000匹未満であればそれぞれ1.2倍になるものとします。<br />
これを99,999年繰り返します。</p>
<h2><span id="toc2">結果</span></h2>
<p>コードは後述のとおりです。<br />
結果は下のとおりです。<br />
4年周期は周期が短いので減っても増えるので残りますがその他はすべて素数周期になります。<br />
<strong>周期ゼミの周期は素数になる</strong>と言えます。</p>
<div class="codecolorer-container text dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;">[{'period': 3, 'value': 22050},<br />
&nbsp;{'period': 4, 'value': 19998},<br />
&nbsp;{'period': 5, 'value': 18502},<br />
&nbsp;{'period': 6, 'value': 0},<br />
&nbsp;{'period': 7, 'value': 32750},<br />
&nbsp;{'period': 8, 'value': 0},<br />
&nbsp;{'period': 9, 'value': 0},<br />
&nbsp;{'period': 10, 'value': 0},<br />
&nbsp;{'period': 11, 'value': 11336},<br />
&nbsp;{'period': 12, 'value': 0},<br />
&nbsp;{'period': 13, 'value': 11626},<br />
&nbsp;{'period': 14, 'value': 0},<br />
&nbsp;{'period': 15, 'value': 0},<br />
&nbsp;{'period': 16, 'value': 0},<br />
&nbsp;{'period': 17, 'value': 13262},<br />
&nbsp;{'period': 18, 'value': 0},<br />
&nbsp;{'period': 19, 'value': 18062},<br />
&nbsp;{'period': 20, 'value': 0}]</div></div>
<h2><span id="toc3">コード</span></h2>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;height:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">pprint</span><br />
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; <span style="color: #808080; font-style: italic;"># 初期設定</span><br />
&nbsp; value_limit <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">50000</span><br />
&nbsp; increase_rate <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1.2</span><br />
&nbsp; sicadas <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> year <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">21</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; sicadas.<span style="color: black;">append</span><span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;period&quot;</span> : year<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;value&quot;</span> : <span style="color: #ff4500;">10000</span><span style="color: black;">&#125;</span><span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #808080; font-style: italic;"># 年ごとの処理</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> year <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span> <span style="color: #ff4500;">100000</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; total <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> sicada <span style="color: #ff7700;font-weight:bold;">in</span> sicadas:<br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> year % sicada<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;period&quot;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; total +<span style="color: #66cc66;">=</span> sicada<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;value&quot;</span><span style="color: black;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i<span style="color: #66cc66;">,</span> sicada <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>sicadas<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> year % sicada<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;period&quot;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">==</span> <span style="color: #ff4500;">0</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> total <span style="color: #66cc66;">&gt;</span> value_limit:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new_value <span style="color: #66cc66;">=</span> value_limit * sicadas<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;value&quot;</span><span style="color: black;">&#93;</span> / total<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sicadas<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;value&quot;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>new_value<span style="color: black;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">else</span>:<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new_value <span style="color: #66cc66;">=</span> sicadas<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;value&quot;</span><span style="color: black;">&#93;</span> * increase_rate<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sicadas<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;value&quot;</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>new_value<span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #dc143c;">pprint</span>.<span style="color: #dc143c;">pprint</span><span style="color: black;">&#40;</span>sicadas<span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;__main__&quot;</span>:<br />
&nbsp; main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/16633/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>他人とかぶらず歌を歌い切る確率は？</title>
		<link>https://stabucky.com/wp/archives/15795</link>
					<comments>https://stabucky.com/wp/archives/15795#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Wed, 24 May 2023 03:54:28 +0000</pubDate>
				<category><![CDATA[テレビ]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[確率]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=15795</guid>

					<description><![CDATA[5月14日放送の「ダウンタウンのガキの使いやあらへんで！」は2週続けて「祝！浜田雅功還暦記念！WOW WAR TONIGHTを歌い切ろう！」でした。 10人の参加者が自分の好きなタイミングで歌を一節ずつ歌うのですが、他人 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>5月14日放送の「ダウンタウンのガキの使いやあらへんで！」は2週続けて「祝！浜田雅功還暦記念！WOW WAR TONIGHTを歌い切ろう！」でした。<br />
10人の参加者が自分の好きなタイミングで歌を一節ずつ歌うのですが、他人とかぶってはダメというもの。もちろん誰も歌わないというのもダメです。<br />
番組では180回目の挑戦で成功していました。<br />
もっとも最初は松本が歌うことが多く最初の3人位は決まっていました。<br />
厳密にやるとどうなるのでしょうか。<span id="more-15795"></span></p>
<p>1回の挑戦で成功する確率は0.00036288です。<br />
10!/10<sup>10</sup>で求まると思います。</p>
<p>では成功するまでの回数の平均はどうなるでしょうか。<br />
Pythonでシミュレーションをやってみると3205回となりました。<br />
これはまず成功しません。</p>
<p>最初の3人位は決まっていたとすると7人連続であれば成功ということでシミュレーションをやってみます。<br />
この場合は、186回となりました。<br />
これならば番組の挑戦とほとんど同じです。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;height:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">random</span><br />
ninzu <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">10</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; <span style="color: #008000;">all</span> <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">100</span><br />
&nbsp; s <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #008000;">all</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; s +<span style="color: #66cc66;">=</span> challenge<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>s / <span style="color: #008000;">all</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> challenge<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; kaisu <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:<br />
&nbsp; &nbsp; kaisu +<span style="color: #66cc66;">=</span> <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">if</span> once<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> kaisu<br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> once<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:<br />
&nbsp; numbers <span style="color: #66cc66;">=</span> <span style="color: #008000;">set</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>ninzu<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; numbers.<span style="color: black;">add</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">random</span>.<span style="color: black;">randint</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span> ninzu<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>numbers<span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> ninzu<br />
<br />
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;__main__&quot;</span>:<br />
&nbsp; main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/15795/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>文字列の類似度を計算するレーベンシュタイン距離をPython、VBAで実装</title>
		<link>https://stabucky.com/wp/archives/15338</link>
					<comments>https://stabucky.com/wp/archives/15338#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Sat, 12 Nov 2022 06:39:03 +0000</pubDate>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[VBA]]></category>
		<category><![CDATA[類似度]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=15338</guid>

					<description><![CDATA[目次 レーベンシュタイン距離とはPythonVBA レーベンシュタイン距離とは 文字列が二つあったとき、これらがどれほど類似しているかを知るための指標の一つがレーベンシュタイン距離です。 厳密に言えば「どれほど相違してい [&#8230;]]]></description>
										<content:encoded><![CDATA[
  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">レーベンシュタイン距離とは</a></li><li><a href="#toc2" tabindex="0">Python</a></li><li><a href="#toc3" tabindex="0">VBA</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">レーベンシュタイン距離とは</span></h2>
<p>文字列が二つあったとき、これらがどれほど類似しているかを知るための指標の一つがレーベンシュタイン距離です。<br />
厳密に言えば「どれほど相違しているかを示す指標」です。</p>

<a rel="noopener" href="https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2" title="レーベンシュタイン距離 - Wikipedia" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fja.wikipedia.org%2Fwiki%2F%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%2599%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A5%25E3%2582%25BF%25E3%2582%25A4%25E3%2583%25B3%25E8%25B7%259D%25E9%259B%25A2?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">レーベンシュタイン距離 - Wikipedia</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">ja.wikipedia.org</div></div></div></div></a>
<p>ここにレーベンシュタイン距離を求める方法が擬似コードで示されているのでPythonとVBAで書いてみました。<br />
レーベンシュタイン距離は相違を示す指標なので、二つの文字列の長い方の長さで割り1から減じた数値のほうが使いやすいです。<br />
同じ文字列は1.0になります。<br />
類似度を表す関数をsimirality、レーベンシュタイン距離を求める関数をlevenshteinとしました。</p>
<h2><span id="toc2">Python</span></h2>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #ff7700;font-weight:bold;">def</span> similarity<span style="color: black;">&#40;</span>str0<span style="color: #66cc66;">,</span> str1<span style="color: black;">&#41;</span>:<br />
&nbsp; ld <span style="color: #66cc66;">=</span> levenshtein<span style="color: black;">&#40;</span>str0<span style="color: #66cc66;">,</span> str1<span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #ff4500;">1</span> - ld / <span style="color: #008000;">max</span><span style="color: black;">&#40;</span><span style="color: #008000;">len</span><span style="color: black;">&#40;</span>str0<span style="color: black;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>str1<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><br />
<br />
<span style="color: #ff7700;font-weight:bold;">def</span> levenshtein<span style="color: black;">&#40;</span>str0<span style="color: #66cc66;">,</span> str1<span style="color: black;">&#41;</span>:<br />
&nbsp; len_str0 <span style="color: #66cc66;">=</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>str0<span style="color: black;">&#41;</span><br />
&nbsp; len_str1 <span style="color: #66cc66;">=</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>str1<span style="color: black;">&#41;</span><br />
&nbsp; d <span style="color: #66cc66;">=</span> <span style="color: black;">&#91;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>len_str1 + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>len_str0 + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>len_str0 + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; d<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> i<br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>len_str1 + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; d<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>j<span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> j<br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>len_str0<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; <span style="color: #ff7700;font-weight:bold;">for</span> j <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>len_str1<span style="color: black;">&#41;</span>:<br />
&nbsp; &nbsp; &nbsp; cost <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">if</span> str0<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span> <span style="color: #66cc66;">==</span> str1<span style="color: black;">&#91;</span>j<span style="color: black;">&#93;</span> <span style="color: #ff7700;font-weight:bold;">else</span> <span style="color: #ff4500;">1</span><br />
&nbsp; &nbsp; &nbsp; d<span style="color: black;">&#91;</span>i + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>j + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">=</span> <span style="color: #008000;">min</span><span style="color: black;">&#40;</span>d<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>j + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span> + <span style="color: #ff4500;">1</span><span style="color: #66cc66;">,</span> d<span style="color: black;">&#91;</span>i + <span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>j<span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> d<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>j<span style="color: black;">&#93;</span> + cost<span style="color: black;">&#41;</span><br />
&nbsp; <span style="color: #ff7700;font-weight:bold;">return</span> d<span style="color: black;">&#91;</span>len_str0<span style="color: black;">&#93;</span><span style="color: black;">&#91;</span>len_str1<span style="color: black;">&#93;</span></div></div>
<h2><span id="toc3">VBA</span></h2>
<div class="codecolorer-container vb dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;height:400px;"><div class="vb codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #E56717; font-weight: bold;">Function</span> similarity(str1, str2)<br />
&nbsp; ld = levenshteinDistance(str1, str2)<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">If</span> Len(str1) &gt; Len(str2) <span style="color: #8D38C9; font-weight: bold;">Then</span><br />
&nbsp; &nbsp; str_len = Len(str1)<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">Else</span><br />
&nbsp; &nbsp; str_len = Len(str2)<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span><br />
&nbsp; similarity = 1 - ld / str_len<br />
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #E56717; font-weight: bold;">Function</span><br />
<br />
<span style="color: #E56717; font-weight: bold;">Function</span> levenshteinDistance(str1, str2)<br />
&nbsp; x = Len(str1)<br />
&nbsp; y = Len(str2)<br />
&nbsp; <span style="color: #151B8D; font-weight: bold;">ReDim</span> d(x, y)<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">For</span> i = 0 <span style="color: #8D38C9; font-weight: bold;">To</span> x<br />
&nbsp; &nbsp; d(i, 0) = i<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">Next</span> i<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">For</span> j = 0 <span style="color: #8D38C9; font-weight: bold;">To</span> y<br />
&nbsp; &nbsp; d(0, j) = j<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">Next</span> j<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">For</span> i = 1 <span style="color: #8D38C9; font-weight: bold;">To</span> x<br />
&nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">For</span> j = 1 <span style="color: #8D38C9; font-weight: bold;">To</span> y<br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">If</span> Mid(str1, i, 1) = Mid(str2, j, 1) <span style="color: #8D38C9; font-weight: bold;">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cost = 0<br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">Else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; cost = 1<br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span><br />
&nbsp; &nbsp; &nbsp; temp = d(i - 1, j) + 1<br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">If</span> temp &gt; d(i, j - 1) + 1 <span style="color: #8D38C9; font-weight: bold;">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; temp = d(i, j - 1) + 1<br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">If</span> temp &gt; d(i - 1, j - 1) + cost <span style="color: #8D38C9; font-weight: bold;">Then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; temp = d(i - 1, j - 1) + cost<br />
&nbsp; &nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #8D38C9; font-weight: bold;">If</span><br />
&nbsp; &nbsp; &nbsp; d(i, j) = temp<br />
&nbsp; &nbsp; <span style="color: #8D38C9; font-weight: bold;">Next</span> j<br />
&nbsp; <span style="color: #8D38C9; font-weight: bold;">Next</span> i<br />
&nbsp; levenshteinDistance = d(x, y)<br />
<span style="color: #8D38C9; font-weight: bold;">End</span> <span style="color: #E56717; font-weight: bold;">Function</span></div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/15338/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>翻訳ツール「TexTra」の翻訳精度比較とAPI使用例</title>
		<link>https://stabucky.com/wp/archives/15174</link>
					<comments>https://stabucky.com/wp/archives/15174#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Sat, 27 Aug 2022 07:02:12 +0000</pubDate>
				<category><![CDATA[デジタル]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[翻訳]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=15174</guid>

					<description><![CDATA[国産の翻訳ツールTexTraを使ってみました。 &#12415;&#12435;&#12394;&#12398;&#33258;&#21205;&#32763;&#35379;&#65312;TexTra&#174;mt- [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>国産の翻訳ツールTexTraを使ってみました。<span id="more-15174"></span></p>

<a rel="noopener" href="https://mt-auto-minhon-mlt.ucri.jgn-x.jp/" title="&#12415;&#12435;&#12394;&#12398;&#33258;&#21205;&#32763;&#35379;&#65312;TexTra&reg;" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fmt-auto-minhon-mlt.ucri.jgn-x.jp%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12415;&#12435;&#12394;&#12398;&#33258;&#21205;&#32763;&#35379;&#65312;TexTra&reg;</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mt-auto-minhon-mlt.ucri.jgn-x.jp/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mt-auto-minhon-mlt.ucri.jgn-x.jp</div></div></div></div></a>

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">比較</a><ol><li><a href="#toc2" tabindex="0">原文</a></li><li><a href="#toc3" tabindex="0">Google</a></li><li><a href="#toc4" tabindex="0">DeepL</a></li><li><a href="#toc5" tabindex="0">TexTra</a></li></ol></li><li><a href="#toc6" tabindex="0">API</a></li></ol>
    </div>
  </div>

<h2><span id="toc1">比較</span></h2>
<p>他の翻訳ツールと比較してみました。<br />
元は「不思議の国のアリス」の英語文。これを日本語に訳します。</p>
<h3><span id="toc2">原文</span></h3>
<blockquote><p>Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, “and what is the use of a book,” thought Alice “without pictures or conversations?”</p></blockquote>
<h3><span id="toc3">Google</span></h3>
<blockquote><p>アリスは、銀行で妹のそばに座って何もすることがないことにとてもうんざりし始めていました。一度か二度、妹が読んでいる本をのぞき見しましたが、そこには絵も会話もありませんでした。 絵や会話なしで本を使うの？」とアリスは思いました。</p></blockquote>
<p>定番中の定番、Google翻訳です。<br />
「bank」を「銀行」と訳してしまっています。鉤括弧がペアになっていません。</p>
<h3><span id="toc4">DeepL</span></h3>
<blockquote><p>アリスは、土手で姉のそばに座り、何もすることがないことにとても疲れ始めていた。一度か二度、姉が読んでいる本を覗いたが、そこには絵も会話もなかった。「絵も会話もない本なんて、何の役に立つのかしら」と、アリスは思ったものだ。</p></blockquote>
<p>今、Googleから定番の地位を奪おうとしているのがDeepLです。無料で使えます。<br />
「bank」を「土手」と正しく訳しています。<br />
ミスらしいミスはないです。素晴らしい精度です。</p>
<h3><span id="toc5">TexTra</span></h3>
<blockquote><p>アリスは、銀行で姉のそばに座っていることや、何もすることがないことにとても飽きてきました。姉が読んでいる本を一、二度のぞいてみましたが、その中には絵も会話もありませんでした。「では、絵も会話もない本は何の役に立つのでしょう?」とアリスは思いました。「絵も会話もない本は何の役に立つのでしょう?」</p></blockquote>
<p>新鋭のTexTraです。無料で使えますが、ユーザー登録が必要です。メールアドレスが不要です。パスワード忘れたらどうするんだろう。<br />
「bank」を「銀行」と訳しています。誤りです。<br />
引用符の処理を間違っているのか。同じ文が二回出てきています。これは致命的。<br />
これ以外は使えるレベルと言えるでしょう。</p>
<h2><span id="toc6">API</span></h2>
<p>Web APIが使えます。</p>
<div class="linkcard"><div class="lkc-external-wrap"><div class="lkc-unlink"><div class="lkc-card"><div class="lkc-info"><div class="lkc-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=mt-auto-minhon-mlt.ucri.jgn-x.jp" alt="" width="16" height="16" /></div><div class="lkc-domain">mt-auto-minhon-mlt.ucri.jgn-x.jp</div><div class="lkc-share"> <div class="lkc-sns-hb">6 Users</div> <div class="lkc-sns-po">18 Pockets</div></div></div><div class="lkc-content"><figure class="lkc-thumbnail"><img decoding="async" class="lkc-thumbnail-img" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fmt-auto-minhon-mlt.ucri.jgn-x.jp%2Fcontent%2Fapi%2F?w=200" width="100px" height="108px" alt="" /></figure><div class="lkc-title">Web API一覧 - みんなの自動翻訳＠TexTra®</div><div class="lkc-url" title="https://mt-auto-minhon-mlt.ucri.jgn-x.jp/content/api/"><strike>https://mt-auto-minhon-mlt.ucri.jgn-x.jp/content/api/</strike></div></div><div class="clear"></div></div></div></div></div>
<p>Pythonで試してみました。<br />
元のサイトにあるサンプルコードを修正しています。</p>
<div class="codecolorer-container python dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:400px;"><div class="python codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;"><span style="color: #ff7700;font-weight:bold;">import</span> requests <span style="color: #ff7700;font-weight:bold;">as</span> req<br />
<span style="color: #ff7700;font-weight:bold;">from</span> requests_oauthlib <span style="color: #ff7700;font-weight:bold;">import</span> OAuth1<br />
<span style="color: #ff7700;font-weight:bold;">import</span> json<br />
<br />
NAME <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'stabucky'</span><br />
KEY <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'xxxxx'</span> <span style="color: #808080; font-style: italic;"># API key</span><br />
SECRET <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'xxxxx'</span> <span style="color: #808080; font-style: italic;"># API secret</span><br />
URL <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'https://mt-auto-minhon-mlt.ucri.jgn-x.jp/api/mt/generalNT_en_ja/'</span> <span style="color: #808080; font-style: italic;"># リクエストURL</span><br />
<br />
consumer <span style="color: #66cc66;">=</span> OAuth1<span style="color: black;">&#40;</span>KEY <span style="color: #66cc66;">,</span> SECRET<span style="color: black;">&#41;</span><br />
<br />
params <span style="color: #66cc66;">=</span> <span style="color: black;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'key'</span>: KEY<span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">'name'</span>: NAME<span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;text&quot;</span>: <span style="color: #483d8b;">&quot;This is a pen.&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;"># 訳したい英語文</span><br />
&nbsp; &nbsp; <span style="color: #483d8b;">&quot;type&quot;</span>:<span style="color: #483d8b;">&quot;json&quot;</span><span style="color: #66cc66;">,</span><br />
<span style="color: black;">&#125;</span><br />
<br />
res <span style="color: #66cc66;">=</span> req.<span style="color: black;">post</span><span style="color: black;">&#40;</span>URL <span style="color: #66cc66;">,</span> data<span style="color: #66cc66;">=</span>params <span style="color: #66cc66;">,</span> auth<span style="color: #66cc66;">=</span>consumer<span style="color: black;">&#41;</span><br />
res.<span style="color: black;">encoding</span> <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">'utf-8'</span><br />
result <span style="color: #66cc66;">=</span> json.<span style="color: black;">loads</span><span style="color: black;">&#40;</span>res.<span style="color: black;">text</span><span style="color: black;">&#41;</span><br />
<span style="color: #ff7700;font-weight:bold;">print</span><span style="color: black;">&#40;</span>result<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;resultset&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;result&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;text&quot;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></div></div>
<p>結果<br />
これはペンです。</p>
<p>翻訳元と先の言語はそれぞれ30種類程度から選択できます。今回は英語から日本語のURLを選んでいます。<br />
NAMEは自分のIDです。<br />
KEY、SECRET、URLはサイトに表示されるものをコピペです。<br />
paramsのtextに訳したい英語の文をセットします。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/15174/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>学年別のふりがなを自動的に振る「Furigana」</title>
		<link>https://stabucky.com/wp/archives/15046</link>
					<comments>https://stabucky.com/wp/archives/15046#respond</comments>
		
		<dc:creator><![CDATA[stabucky]]></dc:creator>
		<pubDate>Sat, 02 Jul 2022 23:15:39 +0000</pubDate>
				<category><![CDATA[Tool]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Yahoo!]]></category>
		<guid isPermaLink="false">https://stabucky.com/wp/?p=15046</guid>

					<description><![CDATA[Yahoo！APIに漢字にふりがなを付ける機能があります。 しかも、小学何年生かを指定することができます。 習っていない漢字のみにふりがなを付けられます。 これを使って「Furigana」というツールを使いました。 Fu [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Yahoo！APIに漢字にふりがなを付ける機能があります。<br />
しかも、小学何年生かを指定することができます。<br />
習っていない漢字のみにふりがなを付けられます。<br />
これを使って「Furigana」というツールを使いました。<span id="more-15046"></span></p>

<a rel="noopener" href="https://tool.stabucky.com/convert/furigana/" title="Furigana" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Ftool.stabucky.com%2Fconvert%2Ffurigana%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Furigana</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://tool.stabucky.com/convert/furigana/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">tool.stabucky.com</div></div></div></div></a>
<p>Streamlitで作りました。<br />
https://stabucky-furigana-main-5x0hif.streamlit.app/</p>
<p>2022年9月13日追記<br />
Streamlitは数日間誰もアクセスしないと起動が遅くなるので作り直しました。変換部分はPython、表示部分はPHPです。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stabucky.com/wp/archives/15046/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
