質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

txtを一行ずつ分かち書き, 品詞抽出したいが、入力のまま出力される

tono_1812
tono_1812

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0評価

1クリップ

4819閲覧

投稿2019/07/18 14:08

編集2019/07/19 19:47

txtを一行ずつ分かち書きしてtxtに保存。
また、txtを一行ずつ"形容詞"、"名詞"、"動詞"を抽出、保存したいと考えています。

python

import MeCab tagger = MeCab.Tagger("-Owakati") f = open("lines.txt","r") read_text = f.readline() # readline()で一行ずつ読み込み。 for text in read_text: # readline()だけだと一行しか読み込まれなかったため、for文で繰り返す。 for output in tagger.parse(text): # 分かち書きを行う。 with open("wakati_lines.txt", mode="a") as write_file: # wでは、上書きされるため、aモードで追記する。 write_file.write(output)

上記のスクリプトで分かち書きされると考えていますが、入力がそのまま出力されます。
@hayataka2049さんの回答により原因の判明と分かち書きが出来ました。

python

import MeCab import codecs import ast tagger = MeCab.Tagger() # mecab標準辞書でオブジェクト生成 f = open('lines.txt', 'r') reader = f.read() reader = reader.replace("\n", "|") f.close() node = tagger.parseToNode(reader) result = [reader] while node: word = node.surface #品詞を取得 pos = node.feature.split(",")[0] if pos in ["名詞"]: result.append(node.surface) elif pos in["動詞","形容詞"]: result.append(node.feature.split(",")[6]) #次の単語に進める node = node.next print(result, file=codecs.open("haiku_wakati.txt", "w"))

期待する出力:
['今年', '梅雨', '遅い']
['寝る', '時間']
この形式にする理由は、random.chices()でランダムに要素を抽出し、翻訳生成用データセットを作るためです。
例えば、俳句の場合、
夏 + 梅雨 + 鯉 -(翻訳)-> 鯉 こく 梅雨 傘立 あふれ(分かち書き)
また、[]や''はreplce()で簡単に除去できます。
そして、今後、txt列の品詞抽出を行いたい方がいらっしゃった場合にこの質問は役に立つと考えています。

実際の出力:
['今年の梅雨は遅い。|寝る時間よ。|・・・しなさい。|私に任せなさい。', '今年', '梅雨', '遅い', '|', '寝る', '時間', '|', ・・・ '|', '私', '任せる', 'なさる']

最初に'文章', 次に'品詞','品詞'が出力されます。
read()が全てを読み込むのは分かるのですが、pop()で出来ず、最初の要素をどうやって取り除くか。品詞部分が、\n、\tでは、区切られない問題に対処する必要があると考えています。

参考サイト:
MeCabの形態素解析で使うTagger、Nodeオブジェクトのプロパティとメソッド
https://takaxtech.com/2018/11/03/article271/
Pythonでファイルの読み込み、書き込み
https://note.nkmk.me/python-file-io-open-with/

txt

今年の梅雨は遅い。 寝る時間よ。 もう手遅れだ。 嘘を付くのは悪いことだ。 そろそろ寝る時間だぞ。 右側通行をしなさい。 私に任せなさい。 ```環境:Ubuntu 18.04 何卒、ご教授よろしくお願い致します。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Mecab

Mecabは、オープンソースの形態素解析エンジンです。 言語、辞書、コーパスに依存しない汎用的な設計を基本方針としています。 Mecabの由来は、開発者の好物である和布蕪(めかぶ)から名づけられました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。