{-# language DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-# options_ghc -Wno-unused-imports -Wno-unused-top-binds #-}
module Algebra.Graph.IO.Datasets.LINQS.Cora (
stash
, sourceCoraGraphEdges, loadCoraGraph
, CoraDoc(..)
) where
import Control.Applicative (Alternative(..))
import Control.Monad (when, foldM)
import Control.Monad.IO.Class (MonadIO(..))
import GHC.Generics (Generic(..))
import GHC.Int (Int16)
import Data.Functor (($>))
import qualified Algebra.Graph as G (Graph, empty, overlay, edge)
import Data.Binary (Binary(..), encode, decode, encodeFile, decodeFileOrFail)
import qualified Data.Conduit.Serialization.Binary as CB (conduitDecode, conduitEncode, ParseError(..))
import Data.ByteString (ByteString)
import Data.ByteString.Char8 (unpack)
import Conduit (MonadUnliftIO(..), MonadResource, runResourceT)
import Data.Conduit (runConduit, ConduitT, (.|), yield, await)
import qualified Data.Conduit.Combinators as C (print, sourceFile, sinkFile, map, mapM, foldM, foldMap, foldl, foldMapM, mapWhile)
import Data.Sequence (Seq, (|>))
import qualified Data.Map as M (Map, singleton, lookup)
import System.Directory (createDirectoryIfMissing)
import Control.Monad.Catch (MonadThrow(..))
import System.FilePath ((</>), takeFileName, takeExtension)
import Network.HTTP.Simple (httpSource, getResponseBody, Response, Request, parseRequest, setRequestMethod)
import Text.Megaparsec (parse, parseTest, (<?>))
import Text.Megaparsec.Char (char)
import Text.Megaparsec.Char.Lexer (decimal)
import Text.Megaparsec.Error (errorBundlePretty)
import Control.Monad.Combinators (count)
import Control.Monad.Primitive (PrimMonad(..))
import Data.Conduit.Tar (Header(..), untarChunks, TarChunk, withEntries, FileInfo, filePath, withFileInfo, headerFileType, FileType(..), headerFilePath)
import qualified Data.Text as T (Text, unwords)
import qualified Data.Text.IO as T (readFile)
import Algebra.Graph.IO.Internal.Megaparsec (Parser, ParseE, symbol, lexeme, alphaNum)
import qualified Algebra.Graph.IO.Datasets.LINQS as DL (stash, sourceGraphEdges, loadGraph, restoreContent, CitesRow(..), ContentRow(..))
data CoraDoc = CB | GA | NN | PM | RL | RuL | Th deriving (CoraDoc -> CoraDoc -> Bool
(CoraDoc -> CoraDoc -> Bool)
-> (CoraDoc -> CoraDoc -> Bool) -> Eq CoraDoc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CoraDoc -> CoraDoc -> Bool
$c/= :: CoraDoc -> CoraDoc -> Bool
== :: CoraDoc -> CoraDoc -> Bool
$c== :: CoraDoc -> CoraDoc -> Bool
Eq, Int -> CoraDoc -> ShowS
[CoraDoc] -> ShowS
CoraDoc -> String
(Int -> CoraDoc -> ShowS)
-> (CoraDoc -> String) -> ([CoraDoc] -> ShowS) -> Show CoraDoc
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CoraDoc] -> ShowS
$cshowList :: [CoraDoc] -> ShowS
show :: CoraDoc -> String
$cshow :: CoraDoc -> String
showsPrec :: Int -> CoraDoc -> ShowS
$cshowsPrec :: Int -> CoraDoc -> ShowS
Show, Eq CoraDoc
Eq CoraDoc
-> (CoraDoc -> CoraDoc -> Ordering)
-> (CoraDoc -> CoraDoc -> Bool)
-> (CoraDoc -> CoraDoc -> Bool)
-> (CoraDoc -> CoraDoc -> Bool)
-> (CoraDoc -> CoraDoc -> Bool)
-> (CoraDoc -> CoraDoc -> CoraDoc)
-> (CoraDoc -> CoraDoc -> CoraDoc)
-> Ord CoraDoc
CoraDoc -> CoraDoc -> Bool
CoraDoc -> CoraDoc -> Ordering
CoraDoc -> CoraDoc -> CoraDoc
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: CoraDoc -> CoraDoc -> CoraDoc
$cmin :: CoraDoc -> CoraDoc -> CoraDoc
max :: CoraDoc -> CoraDoc -> CoraDoc
$cmax :: CoraDoc -> CoraDoc -> CoraDoc
>= :: CoraDoc -> CoraDoc -> Bool
$c>= :: CoraDoc -> CoraDoc -> Bool
> :: CoraDoc -> CoraDoc -> Bool
$c> :: CoraDoc -> CoraDoc -> Bool
<= :: CoraDoc -> CoraDoc -> Bool
$c<= :: CoraDoc -> CoraDoc -> Bool
< :: CoraDoc -> CoraDoc -> Bool
$c< :: CoraDoc -> CoraDoc -> Bool
compare :: CoraDoc -> CoraDoc -> Ordering
$ccompare :: CoraDoc -> CoraDoc -> Ordering
$cp1Ord :: Eq CoraDoc
Ord, Int -> CoraDoc
CoraDoc -> Int
CoraDoc -> [CoraDoc]
CoraDoc -> CoraDoc
CoraDoc -> CoraDoc -> [CoraDoc]
CoraDoc -> CoraDoc -> CoraDoc -> [CoraDoc]
(CoraDoc -> CoraDoc)
-> (CoraDoc -> CoraDoc)
-> (Int -> CoraDoc)
-> (CoraDoc -> Int)
-> (CoraDoc -> [CoraDoc])
-> (CoraDoc -> CoraDoc -> [CoraDoc])
-> (CoraDoc -> CoraDoc -> [CoraDoc])
-> (CoraDoc -> CoraDoc -> CoraDoc -> [CoraDoc])
-> Enum CoraDoc
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: CoraDoc -> CoraDoc -> CoraDoc -> [CoraDoc]
$cenumFromThenTo :: CoraDoc -> CoraDoc -> CoraDoc -> [CoraDoc]
enumFromTo :: CoraDoc -> CoraDoc -> [CoraDoc]
$cenumFromTo :: CoraDoc -> CoraDoc -> [CoraDoc]
enumFromThen :: CoraDoc -> CoraDoc -> [CoraDoc]
$cenumFromThen :: CoraDoc -> CoraDoc -> [CoraDoc]
enumFrom :: CoraDoc -> [CoraDoc]
$cenumFrom :: CoraDoc -> [CoraDoc]
fromEnum :: CoraDoc -> Int
$cfromEnum :: CoraDoc -> Int
toEnum :: Int -> CoraDoc
$ctoEnum :: Int -> CoraDoc
pred :: CoraDoc -> CoraDoc
$cpred :: CoraDoc -> CoraDoc
succ :: CoraDoc -> CoraDoc
$csucc :: CoraDoc -> CoraDoc
Enum, (forall x. CoraDoc -> Rep CoraDoc x)
-> (forall x. Rep CoraDoc x -> CoraDoc) -> Generic CoraDoc
forall x. Rep CoraDoc x -> CoraDoc
forall x. CoraDoc -> Rep CoraDoc x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CoraDoc x -> CoraDoc
$cfrom :: forall x. CoraDoc -> Rep CoraDoc x
Generic, Get CoraDoc
[CoraDoc] -> Put
CoraDoc -> Put
(CoraDoc -> Put)
-> Get CoraDoc -> ([CoraDoc] -> Put) -> Binary CoraDoc
forall t. (t -> Put) -> Get t -> ([t] -> Put) -> Binary t
putList :: [CoraDoc] -> Put
$cputList :: [CoraDoc] -> Put
get :: Get CoraDoc
$cget :: Get CoraDoc
put :: CoraDoc -> Put
$cput :: CoraDoc -> Put
Binary)
docClassP :: Parser CoraDoc
docClassP :: Parser CoraDoc
docClassP =
(Text -> Parser Text
symbol Text
"Case_Based" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
CB) Parser CoraDoc -> Parser CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Text -> Parser Text
symbol Text
"Genetic_Algorithms" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
GA) Parser CoraDoc -> Parser CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Text -> Parser Text
symbol Text
"Neural_Networks" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
NN) Parser CoraDoc -> Parser CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Text -> Parser Text
symbol Text
"Probabilistic_Methods" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
PM) Parser CoraDoc -> Parser CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Text -> Parser Text
symbol Text
"Reinforcement_Learning" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
RL) Parser CoraDoc -> Parser CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Text -> Parser Text
symbol Text
"Rule_Learning" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
RuL) Parser CoraDoc -> Parser CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>
(Text -> Parser Text
symbol Text
"Theory" Parser Text -> CoraDoc -> Parser CoraDoc
forall (f :: * -> *) a b. Functor f => f a -> b -> f b
$> CoraDoc
Th)
stash :: FilePath -> IO ()
stash :: String -> IO ()
stash String
fp = String -> String -> Int -> Parser CoraDoc -> IO ()
forall c. Binary c => String -> String -> Int -> Parser c -> IO ()
DL.stash String
fp String
"http://www.cs.umd.edu/~sen/lbc-proj/data/cora.tgz" Int
1433 Parser CoraDoc
docClassP
sourceCoraGraphEdges :: (MonadResource m, MonadThrow m) =>
FilePath
-> M.Map String (Seq Int16, CoraDoc)
-> ConduitT i (Maybe (G.Graph (DL.ContentRow CoraDoc))) m ()
sourceCoraGraphEdges :: String
-> Map String (Seq Int16, CoraDoc)
-> ConduitT i (Maybe (Graph (ContentRow CoraDoc))) m ()
sourceCoraGraphEdges = String
-> Map String (Seq Int16, CoraDoc)
-> ConduitT i (Maybe (Graph (ContentRow CoraDoc))) m ()
forall (m :: * -> *) c i.
(MonadResource m, MonadThrow m) =>
String
-> Map String (Seq Int16, c)
-> ConduitT i (Maybe (Graph (ContentRow c))) m ()
DL.sourceGraphEdges
loadCoraGraph :: FilePath
-> IO (G.Graph (DL.ContentRow CoraDoc))
loadCoraGraph :: String -> IO (Graph (ContentRow CoraDoc))
loadCoraGraph = String -> IO (Graph (ContentRow CoraDoc))
forall c. Binary c => String -> IO (Graph (ContentRow c))
DL.loadGraph