学術引用ネットワークビルダー

中級

これはDocument Extraction, Multimodal AI分野の自動化ワークフローで、9個のノードを含みます。主にSet, Code, PdfVector, WriteBinaryFileなどのノードを使用。 PDFベクトルAPIを使って、Gephi可視化用の学術引用ネットワークを構築

前提条件
  • 特別な前提条件なし、インポートしてすぐに使用可能
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
  "meta": {
    "instanceId": "placeholder"
  },
  "nodes": [
    {
      "id": "config-note",
      "name": "設定",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        250,
        150
      ],
      "parameters": {
        "content": "## Citation Network Builder\n\nInput: Paper IDs (DOI, PubMed ID, etc.)\nDepth: How many citation levels to explore\nOutput: Network graph data"
      },
      "typeVersion": 1
    },
    {
      "id": "input-params",
      "name": "パラメータ設定",
      "type": "n8n-nodes-base.set",
      "position": [
        450,
        300
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "seedPapers",
              "value": "10.1038/nature12373,12345678,2301.12345"
            },
            {
              "name": "depth",
              "value": "2"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "split-ids",
      "name": "論文ID分割",
      "type": "n8n-nodes-base.code",
      "position": [
        650,
        300
      ],
      "parameters": {
        "functionCode": "const papers = $json.seedPapers.split(',').map(id => ({ id: id.trim() }));\nreturn papers;"
      },
      "typeVersion": 1
    },
    {
      "id": "pdfvector-fetch",
      "name": "PDF Vector - 論文取得",
      "type": "n8n-nodes-pdfvector.pdfVector",
      "notes": "Fetch details for each paper",
      "position": [
        850,
        300
      ],
      "parameters": {
        "ids": "={{ $json.id }}",
        "fields": [
          "title",
          "authors",
          "year",
          "doi",
          "abstract",
          "totalCitations",
          "totalReferences"
        ],
        "resource": "academic",
        "operation": "fetch"
      },
      "typeVersion": 1
    },
    {
      "id": "fetch-citations",
      "name": "引用論文取得",
      "type": "n8n-nodes-pdfvector.pdfVector",
      "position": [
        1050,
        300
      ],
      "parameters": {
        "limit": 20,
        "query": "=references:{{ $json.doi }}",
        "fields": [
          "title",
          "authors",
          "year",
          "doi",
          "totalCitations"
        ],
        "resource": "academic",
        "operation": "search"
      },
      "typeVersion": 1
    },
    {
      "id": "build-network",
      "name": "ネットワークデータ構築",
      "type": "n8n-nodes-base.code",
      "position": [
        1250,
        300
      ],
      "parameters": {
        "functionCode": "// Build network nodes and edges\nconst nodes = [];\nconst edges = [];\n\n// Add main paper as node\nnodes.push({\n  id: $json.doi || $json.id,\n  label: $json.title,\n  size: Math.log($json.totalCitations + 1) * 10,\n  citations: $json.totalCitations,\n  year: $json.year,\n  type: 'seed'\n});\n\n// Add citing papers and edges\nif ($json.citingPapers) {\n  $json.citingPapers.forEach(paper => {\n    nodes.push({\n      id: paper.doi,\n      label: paper.title,\n      size: Math.log(paper.totalCitations + 1) * 5,\n      citations: paper.totalCitations,\n      year: paper.year,\n      type: 'citing'\n    });\n    \n    edges.push({\n      source: paper.doi,\n      target: $json.doi || $json.id,\n      weight: 1\n    });\n  });\n}\n\nreturn { nodes, edges };"
      },
      "typeVersion": 1
    },
    {
      "id": "combine-network",
      "name": "ネットワーク結合",
      "type": "n8n-nodes-base.code",
      "position": [
        1450,
        300
      ],
      "parameters": {
        "functionCode": "// Combine all nodes and edges from multiple papers\nconst allNodes = [];\nconst allEdges = [];\n\nitems.forEach(item => {\n  if (item.json.nodes) {\n    allNodes.push(...item.json.nodes);\n  }\n  if (item.json.edges) {\n    allEdges.push(...item.json.edges);\n  }\n});\n\n// Remove duplicate nodes based on ID\nconst uniqueNodes = Array.from(new Map(allNodes.map(node => [node.id, node])).values());\n\nreturn [{ json: { nodes: uniqueNodes, edges: allEdges } }];"
      },
      "typeVersion": 1
    },
    {
      "id": "export-network",
      "name": "Export Network JSON",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        1650,
        300
      ],
      "parameters": {
        "fileName": "citation_network_{{ $now.format('yyyy-MM-dd') }}.json",
        "fileContent": "={{ JSON.stringify({ nodes: $json.nodes, edges: $json.edges }, null, 2) }}"
      },
      "typeVersion": 1
    },
    {
      "id": "generate-gexf",
      "name": "GEXF生成",
      "type": "n8n-nodes-base.code",
      "position": [
        1650,
        450
      ],
      "parameters": {
        "functionCode": "// Generate Gephi-compatible GEXF format\nconst nodes = $json.nodes;\nconst edges = $json.edges;\n\nlet gexf = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<gexf xmlns=\"http://www.gexf.net/1.2draft\" version=\"1.2\">\n  <graph mode=\"static\" defaultedgetype=\"directed\">\n    <nodes>\\n`;\n\nnodes.forEach(node => {\n  gexf += `      <node id=\"${node.id}\" label=\"${node.label}\">\n        <attvalues>\n          <attvalue for=\"citations\" value=\"${node.citations}\"/>\n          <attvalue for=\"year\" value=\"${node.year}\"/>\n        </attvalues>\n      </node>\\n`;\n});\n\ngexf += `    </nodes>\n    <edges>\\n`;\n\nedges.forEach((edge, i) => {\n  gexf += `      <edge id=\"${i}\" source=\"${edge.source}\" target=\"${edge.target}\" weight=\"${edge.weight}\"/>\\n`;\n});\n\ngexf += `    </edges>\n  </graph>\n</gexf>`;\n\nreturn { gexf };"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "input-params": {
      "main": [
        [
          {
            "node": "split-ids",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "combine-network": {
      "main": [
        [
          {
            "node": "export-network",
            "type": "main",
            "index": 0
          },
          {
            "node": "generate-gexf",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "split-ids": {
      "main": [
        [
          {
            "node": "pdfvector-fetch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "build-network": {
      "main": [
        [
          {
            "node": "combine-network",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fetch-citations": {
      "main": [
        [
          {
            "node": "build-network",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "pdfvector-fetch": {
      "main": [
        [
          {
            "node": "fetch-citations",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
よくある質問

このワークフローの使い方は?

上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。

このワークフローはどんな場面に適していますか?

中級 - 文書抽出, マルチモーダルAI

有料ですか?

このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。

ワークフロー情報
難易度
中級
ノード数9
カテゴリー2
ノードタイプ5
難易度説明

経験者向け、6-15ノードの中程度の複雑さのワークフロー

作成者
PDF Vector

PDF Vector

@pdfvector

A fully featured PDF APIs for developers - Parse any PDF or Word document, extract structured data, and access millions of academic papers - all through simple APIs.

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34