Я не думаю, что код машинного чтения распространяется со стандартным дистрибутивом.
Вы должны собрать банку из полного GitHub.
https://github.com/stanfordnlp/CoreNLP/tree/master/src/edu/stanford/nlp/ie/machinereading
Не насколько я знаю. Необходимо записать пересекающую график функцию.
Во-первых, решите, где повредить зацикливание. В этом случае это тривиально: используйте имена узла (предполагающий, что они уникальны в графике). Для более сложной структуры, такой как график с узлами и краями как отдельные типы, необходимо было бы решить, снабдить ли края узлами, узлами с краями, или сохранить узлы и края абсолютно отдельными.
Затем перечислите все узлы в графике. В этом случае очевидный путь состоит в том, чтобы пересечь узлы сбора графика в конечной карте (см. Данные. Карта). Затем сохраните каждый узел как имя, сопровождаемое списком других имен узла.
Восстановление графика означает использовать "женившийся" шаблон. Считайте сохраненный график в структуру [(Строка, [Строка])]. Затем исходный график может быть восстановлен со следующим кодом:
import qualified Data.Map as M
data Node = Node String [Node]
instance Show Node where
show (Node name others) = "Node " ++ show name ++
" " ++ show (map nodeName others)
where nodeName (Node n _) = n
restoreGraph :: [(String, [String])] -> M.Map String Node
restoreGraph pairs = table
where
table = M.fromList $ map makeNode pairs
makeNode (name, others) = (name, Node name $ map findNode others)
findNode str = fromJust $ M.lookup str table
Отметьте взаимную рекурсию: таблица называет makeNode, который называет findNode, который называет таблицу. Благодаря отложенным вычислениям это делает Правильную Вещь.
Править: кодируйте теперь протестированный и немного расширенный.
Да и нет. Это можно сделать через знание предметной области структуры вашего типа узла и определение некоторого понятия равенства, которое вы можете проверить, в сочетании со списком или картой узлов, замеченных до сих пор, для восстановления совместного использования. В патологическом случае в GHC есть понятие StableName для построения такого понятия.
На другом фронте Мэтт Морроу проделал некоторую работу по извлечению в форме файла .S языка ассемблера произвольных циклических данных, используя его удобная вакуумная библиотека. Так что либо это, либо вакуум может удовлетворить ваши потребности.
В целом, отказ от вуду и узлов слежения, замеченных до сих пор на карте, вероятно, является наиболее рациональным и поддерживаемым решением.