

表題の通り、MeCabを用いてPythonでリストからStopwordsを削除したいと思います。

しかしながら TypeError: in method 'Tagger_parse', argument 2 of type 'char const *'
というエラーが出てしまいます。

環境は

Python 3.9.7  
mecab-python3

コードの例：

[code]

    import urllib
    from urllib.request import urlopen
    import MeCab
    import re
    
    # slothlib
    slothlib_path = "http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/Filter/StopWord/word/Japanese.txt"
    sloth_file = urllib.request.urlopen(slothlib_path)
    
    # stopwordsiso
    iso_path = "https://raw.githubusercontent.com/stopwords-iso/stopwords-ja/master/stopwords-ja.txt"
    iso_file = urllib.request.urlopen(iso_path)
    stopwords = [line.decode("utf-8").strip() for line in iso_file]
    
    stopwords = [ss for ss in stopwords if not ss==u'']
    stopwords = list(set(stopwords))
    
    with open("/Desktop/cleaned-stp.txt",encoding='utf8') as f:
        cleanedlist = f.readlines()
        cleanedlist = list(cleanedlist)
    
    tagger = MeCab.Tagger("-Owakati")
    tok_text = tagger.parse(cleanedlist)
    
    ws = re.compile(" ")
    words = [word for word in ws.split(tok_text)]
    if words[-1] == u"\n":
        words = words[:-1]
    ws = [w for w in words if w not in stopwords]
    
    print(words)
    print(ws)
    
[/code]

リストの例（.txt）：

[code]

    できた！私の得点は100あなたはどのくらい「呪術廻戦」について知ってる？テストをやってみよう！コラボ乗り物スキンなどのサプライズ報酬獲得のチャンスもあるよ！荒野呪術検定 呪術廻戦 荒野行動
    「少女ウォーズ:幻想天下統一戦」事前登録中！予約者限定ガチャに参加してSSRキャラやアイテムをＧＥＴ！総回転数43172回！！ 事前予約先行ガチャ 予約トップ10
    呪術廻戦見ます
    荒野CUP公式主催女子杯第2回！！見どころはこちら！・異色コンビ続出！史上最大豪華陣営！・荒野の歴史をなぞる懐かしのコンビが多数！・今年最後の女王を決める戦いが始まる！配信URL： 荒野行動
    
[/code]

初心者で簡単な質問を聞いてしまって申し訳ございません。  
よろしくお願いいたします。


CC BY-SA 4.0
2022-12-18T10:07:06.370
92870
2022-12-19T00:08:44.677
2022-12-18T11:55:26.240
3060
56067
question
python python3 mecab
MeCab 使用時にエラー TypeError: in method 'Tagger_parse', argument 2 of type 'char const *'


私も初心者なので参考になるか分かりませんが、同じくMeCabを使っているとき（まさに今）、同じエラーが出て苦労したので一応共有します！

私の場合、データフレームの列を分かち書きした際にこのエラーが出ました。その列の型がobjectだったのをstrに変えたらうまく動作しました。listはわかりませんが、おそらく型が関係してるのではないかなーと思います。頑張ってください！！！


CC BY-SA 4.0
2022-12-18T15:56:03.083
92882
2022-12-19T00:08:44.677
2022-12-19T00:08:44.677
3060
56083
92870
answer


文字列を渡すべき関数に、文字列のリスト、を渡しているのが原因です。  
<https://taku910.github.io/mecab/bindings.html> にあるように、文字列を渡して下さい。

[code]

    with open("/Desktop/cleaned-stp.txt",encoding='utf8') as f:
        cleaned_text = f.read()
    
    tagger = MeCab.Tagger("-Owakati")
    tok_text = tagger.parse(cleaned_text)
    
[/code]


CC BY-SA 4.0
2022-12-18T19:51:05.603
92883
2022-12-18T19:51:05.603
806
92870
answer