8
n8n 한국어amn8n.com

PDF 벡터 및 다중 내보내기를 포함한 5개 데이터베이스에 걸친 학술 연구 검색

중급

이것은AI RAG, Multimodal AI분야의자동화 워크플로우로, 9개의 노드를 포함합니다.주로 Set, Code, PdfVector, WriteBinaryFile 등의 노드를 사용하며. 跨五个데이터库의学术研究검색,含PDF向量및多重내보내기

사전 요구사항
  • 특별한 사전 요구사항 없이 가져와 바로 사용 가능합니다
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "placeholder"
  },
  "nodes": [
    {
      "id": "search-info",
      "name": "검색 설정",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        250,
        150
      ],
      "parameters": {
        "content": "## Multi-Database Search\n\nSearches:\n- PubMed\n- ArXiv\n- Google Scholar\n- Semantic Scholar\n- ERIC\n\nDeduplicates and ranks results"
      },
      "typeVersion": 1
    },
    {
      "id": "search-params",
      "name": "검색 매개변수 설정",
      "type": "n8n-nodes-base.set",
      "position": [
        450,
        300
      ],
      "parameters": {
        "values": {
          "number": [
            {
              "name": "yearFrom",
              "value": 2020
            },
            {
              "name": "resultsPerSource",
              "value": 25
            }
          ],
          "string": [
            {
              "name": "searchQuery",
              "value": "machine learning healthcare applications"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "pdfvector-search",
      "name": "PDF 벡터 - 다중 DB 검색",
      "type": "n8n-nodes-pdfvector.pdfVector",
      "position": [
        650,
        300
      ],
      "parameters": {
        "limit": "={{ $json.resultsPerSource }}",
        "query": "={{ $json.searchQuery }}",
        "fields": [
          "title",
          "authors",
          "year",
          "doi",
          "abstract",
          "totalCitations",
          "pdfUrl",
          "provider"
        ],
        "resource": "academic",
        "yearFrom": "={{ $json.yearFrom }}",
        "operation": "search",
        "providers": [
          "pubmed",
          "semantic_scholar",
          "arxiv",
          "google_scholar",
          "eric"
        ]
      },
      "typeVersion": 1
    },
    {
      "id": "deduplicate",
      "name": "중복 결과 제거",
      "type": "n8n-nodes-base.code",
      "position": [
        850,
        300
      ],
      "parameters": {
        "functionCode": "// Deduplicate papers based on DOI and title similarity\nconst papers = $json;\nconst unique = new Map();\n\npapers.forEach(paper => {\n  // First check DOI\n  if (paper.doi && !unique.has(paper.doi)) {\n    unique.set(paper.doi, paper);\n  } else if (!paper.doi) {\n    // For papers without DOI, check title similarity\n    const normalizedTitle = paper.title.toLowerCase().replace(/[^a-z0-9]/g, '');\n    let isDuplicate = false;\n    \n    for (const [key, existingPaper] of unique) {\n      const existingTitle = existingPaper.title.toLowerCase().replace(/[^a-z0-9]/g, '');\n      if (normalizedTitle === existingTitle) {\n        isDuplicate = true;\n        // Merge provider info\n        if (!existingPaper.providers) existingPaper.providers = [existingPaper.provider];\n        existingPaper.providers.push(paper.provider);\n        break;\n      }\n    }\n    \n    if (!isDuplicate) {\n      unique.set(normalizedTitle, paper);\n    }\n  }\n});\n\nreturn Array.from(unique.values());"
      },
      "typeVersion": 1
    },
    {
      "id": "rank-results",
      "name": "관련성 순위 지정",
      "type": "n8n-nodes-base.code",
      "position": [
        1050,
        300
      ],
      "parameters": {
        "functionCode": "// Calculate relevance score\nconst papers = $json;\nconst query = $node['Set Search Parameters'].json.searchQuery.toLowerCase();\n\nconst scored = papers.map(paper => {\n  let score = 0;\n  \n  // Title relevance\n  const titleWords = paper.title.toLowerCase().split(' ');\n  const queryWords = query.split(' ');\n  queryWords.forEach(word => {\n    if (titleWords.includes(word)) score += 10;\n  });\n  \n  // Citation impact\n  score += Math.log(paper.totalCitations + 1) * 5;\n  \n  // Recency bonus\n  const yearDiff = new Date().getFullYear() - paper.year;\n  score += Math.max(0, 10 - yearDiff);\n  \n  // Full text availability\n  if (paper.pdfUrl) score += 15;\n  \n  return { ...paper, relevanceScore: score };\n});\n\n// Sort by relevance\nreturn scored.sort((a, b) => b.relevanceScore - a.relevanceScore);"
      },
      "typeVersion": 1
    },
    {
      "id": "generate-bibtex",
      "name": "BibTeX 생성",
      "type": "n8n-nodes-base.code",
      "position": [
        1250,
        250
      ],
      "parameters": {
        "functionCode": "// Generate BibTeX entries\nconst papers = $json;\n\nconst bibtex = papers.map((paper, index) => {\n  const key = paper.doi ? paper.doi.replace(/[^a-zA-Z0-9]/g, '') : `paper${index}`;\n  const authors = paper.authors.join(' and ');\n  \n  return `@article{${key},\n  title={${paper.title}},\n  author={${authors}},\n  year={${paper.year}},\n  doi={${paper.doi || ''}},\n  abstract={${paper.abstract || ''}}\n}`;\n}).join('\\n\\n');\n\nreturn { bibtex, papers };"
      },
      "typeVersion": 1
    },
    {
      "id": "export-bibtex",
      "name": "BibTeX 파일 내보내기",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        1450,
        250
      ],
      "parameters": {
        "fileName": "search_results_{{ $now.format('yyyy-MM-dd') }}.bib",
        "fileContent": "={{ $json.bibtex }}"
      },
      "typeVersion": 1
    },
    {
      "id": "export-json",
      "name": "Export JSON",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        1450,
        350
      ],
      "parameters": {
        "fileName": "search_results_{{ $now.format('yyyy-MM-dd') }}.json",
        "fileContent": "={{ JSON.stringify($json.papers, null, 2) }}"
      },
      "typeVersion": 1
    },
    {
      "id": "export-csv",
      "name": "Export CSV",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        1450,
        450
      ],
      "parameters": {
        "fileName": "search_results_{{ $now.format('yyyy-MM-dd') }}.csv",
        "fileContent": "={{ $json.papers.map(p => [p.title, p.authors.join(';'), p.year, p.doi, p.totalCitations, p.pdfUrl].join(',\t')).join('\\n') }}"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "generate-bibtex": {
      "main": [
        [
          {
            "node": "export-bibtex",
            "type": "main",
            "index": 0
          },
          {
            "node": "export-json",
            "type": "main",
            "index": 0
          },
          {
            "node": "export-csv",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "rank-results": {
      "main": [
        [
          {
            "node": "generate-bibtex",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "deduplicate": {
      "main": [
        [
          {
            "node": "rank-results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "search-params": {
      "main": [
        [
          {
            "node": "pdfvector-search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "pdfvector-search": {
      "main": [
        [
          {
            "node": "deduplicate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - AI RAG, 멀티모달 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