dak ブログ

python、rubyなどのプログラミング、MySQL、サーバーの設定などの備忘録。レゴの写真も。

epub 形式のファイルから本文のテキストを抽出する方法

2020-07-23 15:04:55 | python
epub 形式のファイルから本文のテキストを抽出する方法のメモ。

epub 形式のファイルでは、本文が p タグに記述されているため、p タグ内のテキストを抽出します。
ただし、ruby タグなど他のタグが含まれる場合があるため、不要なタグを除去する必要があります。
import lxml.etree
import ebooklib
from ebooklib import epub

def remove_tag(elem):
    text = lxml.etree.tostring(elem, encoding='utf-8').decode('utf-8')
    text = re.sub('(?:.*?|.*?)','', text)
    text = re.sub('<.*?>', '', text)
    return text

epub_path = "{epubファイル}"
book = epub.read_epub(epub_path)

for item in book.get_items_of_type(ebooklib.ITEM_DOCUMENT):
    dom = lxml.html.fromstring(item.get_content())
    text_nodes = dom.xpath("//p")
    for text_node in text_nodes:
        text = remove_tag(text_node)
        print(text)



awk で tsv の特定カラムの文字列を置換する方法

2020-07-23 14:53:21 | linux
awk で tsv の特定カラムの文字列を置換する方法のメモ。

以下の tsv ファイルの第3カラムの a を A に置換します。
$ cat test.tsv
1       a       1a
1       b       1b
1       c       1c
2       a       2a
2       b       2b
2       c       2c

$ cat test.tsv | awk -F "\t" '{OFS="\t"; gsub(/a/, "A", $3); print $1, $2, $3}'
1       a       1A
1       b       1b
1       c       1c
2       a       2A
2       b       2b
2       c       2c


awk で tsv の特定カラムが正規表現でマッチする行を抽出する方法

2020-07-23 14:41:57 | linux
awk で tsv の特定カラムが正規表現でマッチする行を抽出する方法のメモ。

tsv の第3カラムが正規表現にマッチする行を抽出する場合、以下のようにします。
$ cat text.tsv
1       a       1a
1       b       1b
1       c       1c
2       a       2a
2       b       2b
2       c       2c

$ cat text.tsv | awk -F "\t" '$3 ~ /a/ {OFS="\t"; print}'
1       a       1a
2       a       2a