Mercurial > hg > Papers > 2016 > masa-master
changeset 96:98f32656ce56
add word count explain
author | Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 18 Feb 2016 20:32:59 +0900 |
parents | 9e3988854e93 |
children | c1738511433c |
files | paper/c4.tex paper/c6.tex paper/images/image.graffle paper/master_paper.pdf |
diffstat | 4 files changed, 790 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/c4.tex Thu Feb 18 19:30:11 2016 +0900 +++ b/paper/c4.tex Thu Feb 18 20:32:59 2016 +0900 @@ -1,5 +1,3 @@ -% bitencoding or NFA - \chapter{Cerium による文字列処理の例題} 本項ではファイルを読み込んで文字列処理を並列処理をする流れと例題を記述する。 @@ -39,9 +37,6 @@ if (filename < 0) { return -1; } - /* - * 文字列処理後に出力されるデータの数を設定する。 - */ fmp->division_out_size = sizeof(unsigned long long)*4; task_init(); fmp->run_start(manager, filename); @@ -49,13 +44,22 @@ } \end{lstlisting} -% 箇条書きで -\verb+TASK_EXEC+ -\verb+TASK_EXEC_DATA_PARALLEL+ GPU -\verb+TASK_PRINT+ 集計 Task +% 箇条書きで OK +\begin{itemize} +\item \verb+TASK_EXEC+ 計算を行う Task +\item \verb+TASK_EXEC_DATA_PARALLEL+ GPU にて計算を行う Task +\item \verb+TASK_PRINT+ 結果を集計する Task +\end{itemize} -% run_start を説明する -% option を解釈して mmap や bread の説明 +% option を解釈して mmap や bread の説明 OK +ソースコード\ref{src:TMmain}の 7行目の \verb+init+ で option が解釈される。 +option では Task を実行するときの CPU 数や、読み込み方法(mmap か Blocked Read)など設定できる。 + +11行目\verb+division_out_size+ では、計算を行う Task の出力されるデータ数を設定できる。 + +% run_start を説明する OK? +12行目の \verb+run_start+ によって読み込む Taskと計算を行う Task が生成される。 +ここで Task の依存関係が設定される。 文字列処理の Task と結果の整合や表示を行う Print Task をそれぞれ決められたフォーマットに沿って記述すればよい。 ファイルを分割して文字列処理を行なった際、分割された部分でそれぞれの例題の整合性が取れなくなってしまうことがある。 @@ -100,11 +104,7 @@ \end{figure} この問題の解決方法として、分割されたファイルの一つ目が文字で終わり、二つ目のファイルの先頭が改行または空白で始まった場合はそれぞれの単語数の合計数から 1 足すことにより整合性を取ることができる。 -ソースコード\ref{src:Print}の18-22行目にてその処理を行なっている。 - -ソースコード\ref{src:Exec}は Word Count のメインルーチンである。 -% 分割されたファイルを先頭から見ていき、まずは先頭が空白か改行かどうかをチェックする。 -% 空白や改行が読み込まれるたびに Word Num や Line Num をカウントしていき、最後に分割されたファイルの末尾が空白かどうかをチェックしている。 +ソースコード\ref{src:Print}の17-20行目にてその処理を行なっている。 \begin{lstlisting}[frame=lrbt,label=src:Exec,caption=Word Countの記述,numbers=left] SchedDefineTask1(Exec,wordcount); @@ -113,7 +113,6 @@ wordcount(SchedTask *s, void *rbuf, void *wbuf) { unsigned long long *head_tail_flag = o_data +2; - // 先頭が空白か改行かのチェック head_tail_flag[0] = (i_data[0] != 0x20) && (i_data[0] != 0x0A); word_num -= 1-head_tail_flag[0]; for (; i < length; i++) { @@ -128,18 +127,16 @@ } } word_num += word_flag; - // ファイルの末尾が空白か改行かのチェック head_tail_flag[1] = (i_data[i-1] != 0x20) && (i_data[i-1] != 0x0A); - // Output Data の設定 o_data[0] = (unsigned long long)word_num; o_data[1] = (unsigned long long)line_num; return 0; } \end{lstlisting} -ソースコード\ref{src:Print}は、それぞれの Task で出力された結果をまとめる処理がまとめられている。 -Task それぞれの単語数と行数を集計し、分割された部分に関して整合性をとり単語数を調整する。 -単語数、行数がそれぞれ決定されたのちに結果が Print される。 +ソースコード\ref{src:Exec} の9-19行目で行数と単語数を数えている。 +\verb+head_tail_flag+ はファイルの先頭と末尾に空白か改行があればどうかのフラグを立てる。 +Word Count Task は単語数、行数、\verb+head_flag+、\verb+tail_flag+ の4つのデータを出力する。 \begin{lstlisting}[frame=lrbt,label=src:Print,caption=Word Count の Print Task,numbers=left] #define STATUS_NUM 2 @@ -154,11 +151,9 @@ word_data[i] = 0; } int out_size = w->division_out_size / sizeof(unsigned long long); - // 結果の整合性を取りながら、行数と単語数をカウントする。 for (int i = 0; i < out_task_num ; i++) { word_data[0] += idata[i*out_size+0]; // 単語数の集計 word_data[1] += idata[i*out_size+1]; // 行数の集計 - // 前のファイルの末尾と次のファイルの先頭を比較し単語数の集計を微調整 unsigned long long *head_tail_flag = &idata[i*out_size+2]; if((i!=out_task_num-1)&& (head_tail_flag[1] == 1) && (head_tail_flag[4] == 0)) { @@ -169,6 +164,11 @@ } \end{lstlisting} +ソースコード\ref{src:Print}は、それぞれの Task で出力された結果をまとめる処理がまとめられている。 +13-22行目にて Word Count Task で出力された単語数と行数を集計する。 +また、\verb+head_tail_flag+の付け合せで分割された部分に関して整合性をとる。 +単語数、行数がそれぞれ決定されたのちに結果が Print される。 + \section{Boyer-Moore String Search} 読み込んだテキストファイルに対してある特定の文字列検索を行う例題として、Boyer-Moore String Search が挙げられる。 @@ -597,7 +597,8 @@ このとき、状態 2 と 4 を組み合わせて一つの状態を新しく作り、その状態に遷移させる。新しく作られる状態の数は状態の組み合わせなので、その状態の組み合わせの和をとっている。 これより、状態 4 に a か [c-z] を入力すると状態 4 に遷移し、b が入力されると新しい状態 2,4 に遷移する。 -このような変換をすることによって、入力によって遷移先が一意に決定されるようになる。(図\ref{fig:dfa}) +このような変換をすることによって、入力によって遷移先が一意に決定されるようになる。 +(図\ref{fig:dfa}) \begin{figure}[htpb] \begin{center} @@ -615,10 +616,15 @@ 1つの Bit が正規表現に割り振られた Base 状態に対応する。 組み合わされた状態は、複数の Bit が立っていることにより表される。 状態の組み合わせは、BitVector の論理和によって簡単に計算される。 +(図\ref{fig:bitvector}) -ソースコード\ref{src:cc}は文字クラスの構造体である。正規表現木の各ノードそれぞれに、この構造体を持っている。 -文字クラスは二分木で構築されており、それぞれの二分木に文字の範囲である Condition を持っている。 -その Condition の範囲内の文字の入力があれば、次の状態 nextState に遷移する。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.2]{images/regex/bitvector.pdf} + \end{center} + \caption{状態の論理和} + \label{fig:bitvector} +\end{figure} % charclass 構造体 ソース @@ -641,7 +647,26 @@ BitVector nextState; } CharClass, *CharClassPtr; \end{lstlisting} -%ソースコードの説明 +%ソースコードの説明 OK +ソースコード\ref{src:cc}は文字クラスの構造体である。正規表現木の各ノードそれぞれにこの構造体を持っている。 +文字クラスは二分木で構築されている。 +文字クラスの範囲は Condition 内の RangeList の begin と end に設定される。 +それぞれの二分木に文字の範囲である Condition を持っている。 +その Condition の範囲内の文字の入力があれば、次の状態 nextState に遷移する。 + +Condition には Word も格納できるようにしている。 +現段階の実装では、BitVector の最大数は 64 で制限されている。 +一つ一つの文字に状態を割り振るとすぐに上限に達する恐れがある。 + +状態数を節約する工夫として、文字列を 1 の状態として割り当てることにより、文字列の長さ分だけ節約することができる。 +図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 +\begin{figure}[htpb] + \begin{center} + \includegraphics[scale=0.17]{images/regex/wordstate.pdf} + \end{center} + \caption{状態割当を一文字から文字列にすることにより、状態数を節約できる。} + \label{fig:wordstate} +\end{figure} 図\ref{fig:sc} に2つの状態があり、それぞれに入力と遷移先がある。 これら 2 つの状態を一つの状態として表現し、新しく状態遷移図を生成する。
--- a/paper/c6.tex Thu Feb 18 19:30:11 2016 +0900 +++ b/paper/c6.tex Thu Feb 18 20:32:59 2016 +0900 @@ -11,22 +11,22 @@ その結果、ファイル読み込みを含め egrep と比較して最大 66 \% 速度がでる。 \section{今後の課題} -これまでの正規表現は一文字ずつ参照して状態を割り振っていった。この状態割り振りの問題として文字列の長さの分だけ状態ができてしまう。 -状態が長くなればなるほど、ファイルと正規表現のマッチング時の状態遷移数もそれだけ多くなってしまう。 -状態遷移数が多くなると、それだけ状態と入力を見て次の状態に遷移するという動作を何度も繰り返すことになってしまうので、処理的にも重くなってしまう。 -同じ正規表現でも状態を少なくすればそのような繰返し処理も減っていくので、状態数を減らせばマッチングするまでの処理を軽減することができる。 -状態数を減らす工夫として、文字列を一つの状態として見ることによって状態数を減らす。 - -図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 -一文字ずつそれぞれに状態を割り振った場合、状態数 5 のオートマトンが構成される。 -これを一つの文字列に対して状態を割り振った場合、状態数 2 のオートマトンが構成され、状態数を削減することができる。 - -\begin{figure}[htpb] - \begin{center} - \includegraphics[scale=0.17]{images/regex/wordstate.pdf} - \end{center} - \caption{文字単位の状態割り振りを文字列単位での状態割り振りに変更} - \label{fig:wordstate} -\end{figure} - -実際にファイルに対して文字列を検索するときは、Boyer-Moore String Search を採用することにより、さらに高速になると期待される。 +% これまでの正規表現は一文字ずつ参照して状態を割り振っていった。この状態割り振りの問題として文字列の長さの分だけ状態ができてしまう。 +% 状態が長くなればなるほど、ファイルと正規表現のマッチング時の状態遷移数もそれだけ多くなってしまう。 +% 状態遷移数が多くなると、それだけ状態と入力を見て次の状態に遷移するという動作を何度も繰り返すことになってしまうので、処理的にも重くなってしまう。 +% 同じ正規表現でも状態を少なくすればそのような繰返し処理も減っていくので、状態数を減らせばマッチングするまでの処理を軽減することができる。 +% 状態数を減らす工夫として、文字列を一つの状態として見ることによって状態数を減らす。 +% +% 図\ref{fig:wordstate}は、`word' という文字列の正規表現の正規表現木、DFA 及び状態遷移テーブルである。 +% 一文字ずつそれぞれに状態を割り振った場合、状態数 5 のオートマトンが構成される。 +% これを一つの文字列に対して状態を割り振った場合、状態数 2 のオートマトンが構成され、状態数を削減することができる。 +% +% \begin{figure}[htpb] +% \begin{center} +% \includegraphics[scale=0.17]{images/regex/wordstate.pdf} +% \end{center} +% \caption{文字単位の状態割り振りを文字列単位での状態割り振りに変更} +% \label{fig:wordstate} +% \end{figure} +% +% 実際にファイルに対して文字列を検索するときは、Boyer-Moore String Search を採用することにより、さらに高速になると期待される。
--- a/paper/images/image.graffle Thu Feb 18 19:30:11 2016 +0900 +++ b/paper/images/image.graffle Thu Feb 18 20:32:59 2016 +0900 @@ -26,7 +26,7 @@ <key>MasterSheets</key> <array/> <key>ModificationDate</key> - <string>2016-02-18 03:44:51 +0000</string> + <string>2016-02-18 10:38:26 +0000</string> <key>Modifier</key> <string>MasaKoha</string> <key>NotesVisible</key> @@ -14933,6 +14933,718 @@ <key>GraphicsList</key> <array> <dict> + <key>Class</key> + <string>LineGraphic</string> + <key>FontInfo</key> + <dict> + <key>Font</key> + <string>Helvetica</string> + <key>Size</key> + <real>12</real> + </dict> + <key>ID</key> + <integer>569</integer> + <key>Points</key> + <array> + <string>{1285.5118226872653, 191.33858441320928}</string> + <string>{1285.5118226872653, 216.02362414335636}</string> + </array> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>HeadArrow</key> + <string>FilledArrow</string> + <key>Legacy</key> + <false/> + <key>LineType</key> + <integer>1</integer> + <key>TailArrow</key> + <string>0</string> + </dict> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1275.5118226872653, 121.65354468306217}, {20, 30}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + </dict> + <key>ID</key> + <integer>567</integer> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 +}</string> + </dict> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{1295.5118226872653, 127.55905627547284}, {49, 30}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + <key>Size</key> + <real>13</real> + </dict> + <key>ID</key> + <integer>566</integer> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset128 HiraginoSans-W3;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\qc\partightenfactor0 + +\f0\fs26 \cf0 \'98\'5f\'97\'9d\'98\'61}</string> + </dict> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{1167.4724518369501, 218.03149831341938}, {33, 30}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + </dict> + <key>ID</key> + <integer>564</integer> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 2,4}</string> + </dict> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{1336.5354451974542, 216.02362414335636}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>563</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1302.519696857328, 216.02362414335636}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>562</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1268.5039485172022, 216.02362414335636}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>561</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1234.4882001770764, 216.02362414335636}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>560</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1200.4724518369501, 216.02362414335636}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>559</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1181.4724518369501, 153.66141885312518}, {19, 30}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + </dict> + <key>ID</key> + <integer>558</integer> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 4}</string> + </dict> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{1181.4724518369501, 91.299213562894053}, {19, 30}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>FitText</key> + <string>YES</string> + <key>Flow</key> + <string>Resize</string> + <key>FontInfo</key> + <dict> + <key>Color</key> + <dict> + <key>b</key> + <string>0</string> + <key>g</key> + <string>0</string> + <key>r</key> + <string>0</string> + </dict> + </dict> + <key>ID</key> + <integer>557</integer> + <key>Style</key> + <dict> + <key>fill</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + <key>stroke</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Align</key> + <integer>0</integer> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\deftab720 +\pard\pardeftab720\partightenfactor0 + +\f0\fs32 \cf0 2}</string> + </dict> + <key>Wrap</key> + <string>NO</string> + </dict> + <dict> + <key>Bounds</key> + <string>{{1336.5354451974542, 151.65354468306217}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>556</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1302.519696857328, 151.65354468306217}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>555</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1268.5039485172022, 151.65354468306217}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>554</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1234.4882001770761, 151.65354468306217}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>553</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1200.4724518369501, 151.65354468306217}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>552</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1336.5354451974542, 89.291339392831006}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>551</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1302.519696857328, 89.291339392831006}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>550</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 1}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1268.5039485172022, 89.291339392831006}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>549</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1234.4882001770761, 89.291339392831006}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>548</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> + <key>Bounds</key> + <string>{{1200.4724518369501, 89.291339392831006}, {34.015748340126095, 34.015748340126095}}</string> + <key>Class</key> + <string>ShapedGraphic</string> + <key>ID</key> + <integer>1</integer> + <key>Style</key> + <dict> + <key>shadow</key> + <dict> + <key>Draws</key> + <string>NO</string> + </dict> + </dict> + <key>Text</key> + <dict> + <key>Text</key> + <string>{\rtf1\ansi\ansicpg932\cocoartf1404\cocoasubrtf340 +{\fonttbl\f0\fnil\fcharset0 HelveticaNeue;} +{\colortbl;\red255\green255\blue255;} +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc\partightenfactor0 + +\f0\fs32 \cf0 0}</string> + </dict> + </dict> + <dict> <key>Bounds</key> <string>{{821.74016463667385, 527.2440992719545}, {43, 27}}</string> <key>Class</key> @@ -85998,9 +86710,9 @@ <key>TopSlabHeight</key> <real>682</real> <key>VisibleRegion</key> - <string>{{486.36363899904836, -165}, {687.5000037252903, 1114.7727333132393}}</string> + <string>{{1028.688524590164, -10.000000000000037}, {495.90163934426209, 804.09836065573768}}</string> <key>Zoom</key> - <real>0.87999999523162842</real> + <real>1.22</real> <key>ZoomValues</key> <array> <array> @@ -86020,8 +86732,8 @@ </array> <array> <string>キャンバス 8</string> - <real>0.87999999523162842</real> - <real>0.88000000000000012</real> + <real>1.22</real> + <real>1.25</real> </array> <array> <string>charclass merge</string>