or1ko's diary

日々を書きます

24

言語処理100本ノック 2015

24. ファイル参照の抽出
記事から参照されているメディアファイルをすべて抜き出せ.

メディアファイルというのが何を指しているのかわからなかったが、
ファイル参照の抽出というタイトルから、File:を抜き出すことにした。
中身を見ていると、日本語のファイルでも良さそうだったが、面倒だったためFileのみとした。

import Data.Aeson as A
import Control.Applicative
import System.Environment
import Data.Maybe
import Data.ByteString.Lazy.UTF8 as B
import GHC.Generics
import Text.Regex.Posix
import Prelude as P
import GHC.IO.Encoding

data Article = Article {
  text :: String,
  title :: String
} deriving (Eq, Show, Generic)
instance FromJSON Article

main = do
  setLocaleEncoding utf8
  filename <- head <$> getArgs
  body <- fromString <$> readFile filename
  writeFile "24.out.txt" $ unlines $ map (P.drop 5) $ filter (\x -> P.length x /= 0 ) $ concatMap concat $ map f $ map (text . fromJust . A.decode) $ B.lines $ body 
  where
    f = ((=~ ("File:[^]|]*" :: String)) :: String -> [[String]]) 

[^]|]と[^|]]で異なる解釈となることが勉強になった。