68773


プログラミング初心者です。アドバイスをいただきたいです。

形態素解析をするために下記サイトなどを参考に関数を利用しようとしたところ、出力データがリスト化されてしまったので、リスト化せずに出力する方法をどなたかご教示いただけませんでしょうか。

[PythonでJanomeを使って形態素解析](https://cartman0.hatenablog.com/entry/2017/11/21/Python%E3%81%A7Janome%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90)

元のデータはData Frameでテキストが縦に並んでおります（例：ブログのタイトルが日付ごとに1列に並んでいる）

[code]

    Date, Title
    2020-01-01, 今日も元気だ
    2020-02-02, ラッキョがうまい
    .
    .
    .
    
[/code]

このようなデータのTitle部分を下記関数でフィルタリングをかけて、そのまま（Data
frame形式のまま？）出力したいのですが（カンマも取り除きたいです）、

[code]

    def wakati_filter(text: str,
                      char_reg_filter=[("[,\.\(\)\{\}\[\]]"," ")],
                      ignore_filter=['接続詞', '接頭辞', '接尾辞', '記号', '助詞', '助動詞']):
        char_filters = [UnicodeNormalizeCharFilter()]
        for reg in char_reg_filter:
            char_filters.append(RegexReplaceCharFilter(*reg))
    
        tokenizer = Tokenizer()
        token_filters = [POSStopFilter(ignore_filter)]
        analyzer = Analyzer(char_filters, tokenizer, token_filters)
        return [token.surface for token in analyzer.analyze(text)]
    
[/code]

上記関数だと出力されるデータが各単語ごとにListになってしまいます。

[code]

    ext='すもももももももものうち'
    wakati_filter(text)
    
    ['すもも', 'もも', 'もも', 'うち']
    
[/code]

どのようにすればリスト形式（且つカンマ毎に単語が区切られていない）ではない形で出力できますでしょうか？


CC BY-SA 4.0
2020-07-20T05:40:50.187
68744
2020-07-21T01:30:15.837
2020-07-20T06:34:38.960
3060
23420
question
python
関数を適用したときにList化されないようにするには


具体的な質問内容が  
「リスト形式(`['すもも', 'もも', 'もも', 'うち']`) → 文字列形式(`'すももももももうち'`) の変換方法を知りたい」  
であると想定して回答します。

その場合は[`str.join`](https://docs.python.org/ja/3/library/stdtypes.html#str.join)を使うことでリストを結合して文字列に変換できます。

質問文のコードを下記のように変更します。  
変更前: `return [token.surface for token in analyzer.analyze(text)]`  
変更後: `return ''.join([token.surface for token in analyzer.analyze(text)])`

> このようなデータのTitle部分を下記関数でフィルタリングをかけて、そのまま（Data
> frame形式のまま？）出力したいのですが（カンマも取り除きたいです）

Title列に[`map`関数](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Series.map.html)で`wakati_filter`を一括適用することができます。

### サンプルコード

[code]

    from janome.tokenizer import Tokenizer
    from janome.analyzer import Analyzer
    from janome.charfilter import UnicodeNormalizeCharFilter, RegexReplaceCharFilter
    from janome.tokenfilter import POSStopFilter
    
    def wakati_filter(text: str,
                      char_reg_filter=[("[,\.\(\)\{\}\[\]]"," ")],
                      ignore_filter=['接続詞', '接頭辞', '接尾辞', '記号', '助詞', '助動詞']):
        char_filters = [UnicodeNormalizeCharFilter()]
        for reg in char_reg_filter:
            char_filters.append(RegexReplaceCharFilter(*reg))
    
        tokenizer = Tokenizer()
        token_filters = [POSStopFilter(ignore_filter)]
        analyzer = Analyzer(char_filters, tokenizer, token_filters)
        return ''.join([token.surface for token in analyzer.analyze(text)])
    
    text = 'すもももももももものうち'
    print(wakati_filter(text))
    
    import pandas as pd
    
    df = pd.DataFrame({'Date': [pd.Timestamp('2020-01-01'), pd.Timestamp('2020-01-02')],
                      'Title': ['今日も元気だ', 'ラッキョがうまい']})
    df.Title = df.Title.map(wakati_filter)
    print(df)
    
[/code]

### 出力内容

[code]

    すももももももうち
            Date    Title
    0 2020-01-01     今日元気
    1 2020-01-02  ラッキョうまい
    
[/code]


CC BY-SA 4.0
2020-07-21T01:30:15.837
68773
2020-07-21T01:30:15.837
9820
68744
answer