前提・実現したいこと
swiftやMacosアプリ作成の初心者です。日本語文章を形態素解析してスペース区切りの単語の列に変換する処理をmacアプリで行っております。
発生している問題・エラーメッセージ
少ない文章でサンプル処理をするとうまく動作するのですが,80Mbの文章を対象に処理すると,400kbほど書き込んだところで数十Gbのメモリを消費して,ダウンしてしまいます(メモリがないと言われる)。以下のコードですが,どこに問題があるのでしょうか。もしくは,このようにすると良いというアドバイスをいただければと思います。おわかりになる方,ヒントをください。
該当のソースコード
Swift
1guard let h_src = FileHandle(forReadingAtPath: srcFile) else{ 2 return 3} 4guard let h_res = FileHandle(forWritingAtPath: targetFile) else{ 5 return 6} 7 8/// 内容を読み込む 9let srcContents = h_src.readDataToEndOfFile() 10guard let contentSrcString = String(data: srcContents, encoding: .utf8) else{ 11 return 12} 13///改行文字で区切る 14let sentence = contentSrcString.components(separatedBy: "\n") 15let space = " " 16let spaceData = space.data(using: .utf8)! 17///1行づつ処理 18for sen in sentence { 19 let ans = Tokenizer.tokenize(text: sen) 20 for var item in ans { 21 ///数詞の場合に N に置き換え 22 let predicate = NSPredicate(format: "SELF MATCHES '\\d+'") 23 if predicate.evaluate(with: item) { 24 item = "N" 25 } 26 // String->Dataに変換 27 let itemStr = item.data(using: .utf8)! 28 // Dataを書き込み 29 h_res.write(itemStr) 30 h_res.write(spaceData) 31 } 32} 33h_src.closeFile() 34h_res.closeFile() 35
補足情報(FW/ツールのバージョンなど)
xcode 12.5
回答1件
あなたの回答
tips
プレビュー