使用の感想と最終版

 実際に本アウトライン・プロセッサーを使用しての感想を列挙します。


○ 良かった点


 書きたい場面や結末から逆算して物語を組み立てるようになった

 →そのために必要な小さな場面を箇条書きして、物語の起伏を想像できるようになった。


 小さな場面に集中できた

 →千文字前後に収まるように、無駄な描写や会話を意識して削除するようになった。


 小さな場面を書き切るという小さな目標の達成感を味わえた


 アニメなどの映像から、印象に残った物語の起伏を箇条書きで残すようになった。

 →創作の引き出しが増えた。


○ 悪かった点


 小さなファイル単位で書くので、キャラクターの名前などを修正する場合に手間がかかった。

 →当方はポメラDM100で書いているので、grep置き換え機能が使えません。PCの高機能エディタで書くなら問題ないのはわかっていますが。


○ 総評


 物語を書く生産性は上がったと感じました。

 書く速度、物語の密度、どちらにも効果があるように感じました。

 これからも、このツールを使って物語を生産していくつもりです。


○ おわりに


 公募向けで、物語を一つのテキストファイルにまとめる場合に、[見出し]の階層構造に対応している本ツールは役立つと思います。

 PCにpython2.xをインストールし、本ツールの全角タブ二個をタブに変換したoutliner.pyを是非ともお試しください。

 お金を出せば便利なアウトライン・プロセッサーが手に入ります。その前に、本ツールでアウトラインから物語を書いて、その効果を体感するのもありだと思います。


 以下は最終版の使用方法です。


> python outliner.py ルート.txt 出力.txt 読み込むテキストファイルのプレフィックス


 と実行してください。


 読み込むテキストファイルのプレフィックスとは、


 プレフィックス*.txt


 とみなし、ファイルを検索します。


 プレフックスがなければ、実行ディレクトリの全.txtファイルが対象になります。


例) 実行ディレクトリのファイル群

 032-0.txt → ルート.txt

 032-1.txt → 場面1.txt

 032-2.txt → 場面2.txt

 032.txt → 出力.txt


> python outliner.py 032-0.txt 032.txt 032-


 以下、最終プログラムです。


------------ outliner.py

# coding:utf-8

# run on python2.7x


import codecs

import sys

import glob


class Context:

  def __init__(self, filename):

    f = codecs.open(filename, 'r', 'utf-8')

    self.lines_ = f.readlines()

    f.close()


  def dump(self):

    for l in self.lines_:

      print l


  def line(self, n = 0):

    if len(self.lines_) <= n:

      return None

    return self.lines_[n].rstrip()


  def headline(self, n):

    l = self.line(n)

    if l is None:

      return None

    if len(l) <= 0:

      return None

    h = l.lstrip()

    if h[0] == '[' and h[-1] == ']':

      return h[1:-1]

    return None


if 1 < len(sys.argv):

  contexts = {}


  root = Context(sys.argv[1])

  stack = [[root.line(), 1]]


  o = None

  if 2 < len(sys.argv):

    o = codecs.open(sys.argv[2], 'w', 'utf-8')


  searchStr = '*.txt'

  if 3 < len(sys.argv):

    searchStr = sys.argv[3] + searchStr


  filenames = glob.glob(searchStr)

  for filename in filenames:

    a = Context(filename)

    k = a.line()

    if k is None:

      pass

    elif 0 < len(k):

      if k in contexts:

        print 'fatal error : duplicate headline ', k, ' in ', filename

        sys.exit()

      else:

        contexts[k] = a


  while len(stack):

    cur = stack[-1]

    k = cur[0]

    n = cur[1]

    stack[-1][1] += 1

    if k in contexts:

      h = contexts[k].headline(n)

      if h is None:

        l = contexts[k].line(n)

        if l is None:

          stack.pop()

        else:

          #print l


          # cut comment

          if 0 < len(l) and l[0] == '#':

            continue


          if o is None:

            print l

          else:

            o.write(l)

            o.write('\n')

      else:

        #print '[',h,']'

        h0 = h.rstrip()

        h1 = h0.lstrip()

        stack.append([h1, 1])

    else:

      print 'warning : not found ', k

      stack.pop()


  if o is None:

    pass

  else:

    o.close()

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

Pythonで実行する【アウトライン・プロセッサー】コメント削除機能あり トマトジュー酢 @zuper

★で称える

この小説が面白かったら★をつけてください。おすすめレビューも書けます。

カクヨムを、もっと楽しもう

この小説のおすすめレビューを見る

この小説のタグ