From 3532127071b11631d6f226f5171ce25f1e99d61c Mon Sep 17 00:00:00 2001 From: vtempest <1274452+vtempest@users.noreply.github.com> Date: Sat, 7 Sep 2024 17:01:25 -0700 Subject: [PATCH] added UMAP dimensionality reduction, HNSW vector earch, with test demos. exractors modularized (readabilty, psotlight) --- .github/workflows/static.yml | 14 +- docs/assets/navigation.js | 2 +- docs/assets/search.js | 2 +- .../src_extract_content_core.Document.html | 23 - .../src_extract_content_core.Extractor.html | 25 - ...act_content_courlan_urlstore.UrlStore.html | 42 - ...xtract_content_deduplication.LRUCache.html | 10 - ...extract_content_deduplication.Simhash.html | 14 - ...rc_extract_content_downloads.Response.html | 13 - ...src_extract_content_settings.Document.html | 30 - ...rc_extract_content_settings.Extractor.html | 27 - ...xtract_content_spider.CrawlParameters.html | 19 - ...c_trafilatura_extractor_core.Document.html | 23 + ..._trafilatura_extractor_core.Extractor.html | 25 + ...a_extractor_courlan_urlstore.UrlStore.html | 42 + ...tura_extractor_deduplication.LRUCache.html | 10 + ...atura_extractor_deduplication.Simhash.html | 14 + ...filatura_extractor_downloads.Response.html | 13 + ...ra_extractor_readability.Readability.html} | 325 +- ...afilatura_extractor_settings.Document.html | 30 + ...filatura_extractor_settings.Extractor.html | 27 + ...tura_extractor_spider.CrawlParameters.html | 19 + ...tocomplete.suggestNextWordCompletions.html | 4 +- ...n_allow_cors.modifyChromeAPIAllowCORS.html | 4 +- ...compile_topic_model.compileTopicModel.html | 4 +- ...topic_model.weightWikiWordSpecificity.html | 2 +- ...press_json_jz64.compressBase64ZipText.html | 7 +- ...rt_dictionary_import.importDictionary.html | 2 +- ...t_human_names_import.importHumanNames.html | 2 +- ...ed_typos_import.importMisspelledTypos.html | 2 +- ...port_quora_import.importCommonQueries.html | 2 +- ..._frequency_import.importTermFrequency.html | 2 +- ...ge_titles_import.importWikiPageTitles.html | 2 +- ...src_extract_content_baseline.baseline.html | 4 - ...xtract_content_baseline.basicCleaning.html | 4 - ...src_extract_content_baseline.loadHtml.html | 4 - .../src_extract_content_baseline.trim.html | 4 - ...c_extract_content_core.bareExtraction.html | 4 - .../src_extract_content_core.extract.html | 4 - ...ract_content_courlan_clean.cleanQuery.html | 11 - ...xtract_content_courlan_clean.cleanUrl.html | 10 - ..._content_courlan_clean.decodePunycode.html | 9 - ...ntent_courlan_clean.normalizeFragment.html | 10 - ...t_content_courlan_clean.normalizePart.html | 9 - ...ct_content_courlan_clean.normalizeUrl.html | 12 - ...xtract_content_courlan_clean.scrubUrl.html | 9 - ...t_content_courlan_filters.basicFilter.html | 9 - ..._content_courlan_filters.domainFilter.html | 9 - ...ntent_courlan_filters.extensionFilter.html | 9 - ...tent_courlan_filters.isNavigationPage.html | 9 - ...ontent_courlan_filters.isNotCrawlable.html | 9 - ...ct_content_courlan_filters.isValidUrl.html | 9 - ...ct_content_courlan_filters.langFilter.html | 12 - ...ct_content_courlan_filters.pathFilter.html | 10 - ...ct_content_courlan_filters.typeFilter.html | 11 - ...t_content_courlan_filters.validateUrl.html | 9 - ...extract_content_courlan_meta.addCache.html | 6 - ...ract_content_courlan_meta.clearCaches.html | 6 - ...ntent_courlan_network.redirectionTest.html | 12 - ...ontent_courlan_urlutils.extractDomain.html | 11 - ...t_content_courlan_urlutils.filterUrls.html | 10 - ...t_content_courlan_urlutils.getBaseUrl.html | 9 - ...ntent_courlan_urlutils.getHostAndPath.html | 9 - ..._content_courlan_urlutils.getHostinfo.html | 9 - ...t_content_courlan_urlutils.getTldinfo.html | 10 - ...t_content_courlan_urlutils.isExternal.html | 11 - ..._content_courlan_urlutils.isKnownLink.html | 10 - ...tent_deduplication.contentFingerprint.html | 4 - ...content_deduplication.isSimilarDomain.html | 4 - ...content_downloads.addToCompressedDict.html | 4 - ...t_content_downloads.bufferedDownloads.html | 4 - ...tract_content_downloads.fetchResponse.html | 4 - ...rc_extract_content_downloads.fetchUrl.html | 4 - ..._content_downloads.loadDownloadBuffer.html | 4 - ...ct_content_external.compareExtraction.html | 4 - ...xtract_content_external.justextRescue.html | 4 - ...extract_content_external.sanitizeTree.html | 4 - ...rc_extract_content_feeds.findFeedUrls.html | 4 - ...src_extract_content_feeds.tryHomepage.html | 4 - ...ontent_htmlprocessing.buildHtmlOutput.html | 4 - ...ontent_htmlprocessing.collectLinkInfo.html | 4 - ...ntent_htmlprocessing.convertDeletions.html | 4 - ...content_htmlprocessing.convertDetails.html | 4 - ...t_content_htmlprocessing.convertLists.html | 4 - ..._content_htmlprocessing.convertQuotes.html | 4 - ..._content_htmlprocessing.convertToHtml.html | 4 - ...nt_htmlprocessing.deleteByLinkDensity.html | 4 - ...ontent_htmlprocessing.linkDensityTest.html | 4 - ..._htmlprocessing.linkDensityTestTables.html | 4 - ...ract_content_htmlprocessing.pruneHtml.html | 4 - ...ent_htmlprocessing.pruneUnwantedNodes.html | 4 - ...t_content_htmlprocessing.treeCleaning.html | 4 - ...act_content_json_metadata.extractJson.html | 4 - ...t_json_metadata.extractJsonParseError.html | 4 - ...ontent_json_metadata.normalizeAuthors.html | 4 - ...ontent_main_extractor.extractComments.html | 4 - ...content_main_extractor.extractContent.html | 4 - .../src_extract_content_meta.resetCaches.html | 4 - ...ract_content_metadata.extractMetadata.html | 4 - ...ract_content_settings.argsToExtractor.html | 4 - ...ontent_sitemaps.extractRobotsSitemaps.html | 4 - ...t_content_sitemaps.findRobotsSitemaps.html | 4 - ...t_content_sitemaps.isPlausibleSitemap.html | 4 - ...xtract_content_sitemaps.sitemapSearch.html | 4 - ...extract_content_spider.focusedCrawler.html | 4 - ...xtract_content_utils.controlXmlOutput.html | 4 - ...c_extract_content_utils.deleteElement.html | 4 - ...extract_content_utils.mergeWithParent.html | 4 - ...act_content_utils.removeEmptyElements.html | 4 - ...extract_content_utils.stripDoubleTags.html | 4 - .../src_extract_content_utils.textfilter.html | 4 - .../src_extract_content_utils.trim.html | 4 - .../src_extract_content_utils.xmlToTxt.html | 4 - ...c_extract_content_xml.buildJsonOutput.html | 4 - ...rc_extract_content_xml.buildTeiOutput.html | 4 - .../src_extract_content_xml.checkTei.html | 4 - ...src_extract_content_xml.deleteElement.html | 4 - ...tract_content_xml.removeEmptyElements.html | 4 - ..._to_cite_extract_author.extractAuthor.html | 2 +- ...html_to_cite_extract_cite.extractCite.html | 2 +- ...html_to_cite_extract_date.extractDate.html | 2 +- ..._to_cite_extract_source.extractSource.html | 2 +- ...ml_to_cite_extract_title.extractTitle.html | 2 +- ...an_names_recognize.extractNamedEntity.html | 2 +- ...adata_to_cite.extractCiteFromMetadata.html | 2 +- ...cite_url_to_domain.convertURLToDomain.html | 2 +- ...to_cite_url_to_favicon.extractFavicon.html | 4 +- ...nt_extract_content.extractMainContent.html | 77 - ...extractor1_content.extractContentHTML.html | 77 + ...xtractor2_content.extractContentHTML2.html | 41 + ...special_chars.convertHTMLSpecialChars.html | 6 +- ...nt_html_to_basic_html.addDOMFunctions.html | 2 +- ..._to_basic_html.convertHTMLToBasicHTML.html | 10 +- ...ontent_html_to_content.extractContent.html | 6 - ...html_to_content.extractContentAndCite.html | 14 + ...ntent_readability2.extractContentHTML.html | 24 - ...tent_pdf_to_content.convertPDFToHTML.html} | 9 +- ...rl_to_content_pdf_to_content.isUrlPDF.html | 2 +- ...r_url_to_content_scrape_url.scrapeURL.html | 10 +- ...url_to_content_url_to_content.extract.html | 7 +- ...tent_youtube_embed.embedYoutubePlayer.html | 2 +- ...nt_youtube_to_text.extractYoutubeText.html | 7 +- ...ings_to_graph.convertEmbeddingsToHNSW.html | 15 + ...ings_to_graph.convertEmbeddingsToUMAP.html | 13 + ...to_graph.convertTextToEmbeddingVector.html | 17 + ..._embeddings_to_graph.cosineSimilarity.html | 4 + ..._embeddings_to_graph.getAllEmbeddings.html | 8 + ...eddings_to_graph.getEmbeddingPipeline.html | 6 + ...h_embeddings_to_graph.searchWithQuery.html | 4 + ...e_hnsw.convertEmbeddingsIndexToBase64.html | 10 + ...etters.calculateSimilarityByCharacter.html | 2 +- .../src_match_match_quasar.matchQUASAR.html | 8 +- ...h_softmax.calculateProbabilitySoftmax.html | 5 +- ..._frequency.calculatePhraseSpecificity.html | 2 +- ...frequency.weighRelevanceTermFrequency.html | 4 +- ...search_web_search_stream.searchSTREAM.html | 16 +- .../src_search_web_search_web.searchWeb.html | 7 +- ..._web_search_wikipedia.searchWikipedia.html | 4 +- ...larity_concept.vectorizeTextAsConcept.html | 16 - ...y_concept.weighRelevanceConceptVector.html | 7 +- ...oncept.weighRelevanceConceptVectorAPI.html | 7 +- ...src_tokenize_sentences.splitSentences.html | 7 +- ...okenize_stopwords.isWordCommonIgnored.html | 2 +- ...text_to_chunks.splitTextSemanticChars.html | 2 +- ...kenize_tokenize_topics.tokenizeTopics.html | 7 +- ...rd_to_root_stem.convertWordToRootStem.html | 2 +- ...ution.weighTopicDirichletDistribution.html | 4 +- ...rc_topics_ngrams.extractNounEdgeGrams.html | 2 +- ...rases.rankSentencesCentralToKeyphrase.html | 2 +- ...seektopic_keyphrases.extractSEEKTOPIC.html | 4 +- ...afilatura_extractor_baseline.baseline.html | 4 + ...tura_extractor_baseline.basicCleaning.html | 4 + ...afilatura_extractor_baseline.html2txt.html | 4 + ...afilatura_extractor_baseline.loadHtml.html | 4 + ...c_trafilatura_extractor_baseline.trim.html | 4 + ...latura_extractor_core.bareExtraction.html} | 2 +- ...rc_trafilatura_extractor_core.extract.html | 4 + ...ra_extractor_courlan_clean.cleanQuery.html | 11 + ...tura_extractor_courlan_clean.cleanUrl.html | 10 + ...xtractor_courlan_clean.decodePunycode.html | 9 + ...actor_courlan_clean.normalizeFragment.html | 10 + ...extractor_courlan_clean.normalizePart.html | 9 + ..._extractor_courlan_clean.normalizeUrl.html | 12 + ...tura_extractor_courlan_clean.scrubUrl.html | 9 + ...tura_extractor_courlan_core.checkUrl.html} | 4 +- ..._extractor_courlan_core.extractLinks.html} | 4 +- ...a_extractor_courlan_core.filterLinks.html} | 4 +- ...extractor_courlan_filters.basicFilter.html | 9 + ...xtractor_courlan_filters.domainFilter.html | 9 + ...actor_courlan_filters.extensionFilter.html | 9 + ...ctor_courlan_filters.isNavigationPage.html | 9 + ...ractor_courlan_filters.isNotCrawlable.html | 9 + ...extractor_courlan_filters.isValidUrl.html} | 7 +- ..._extractor_courlan_filters.langFilter.html | 12 + ..._extractor_courlan_filters.pathFilter.html | 10 + ..._extractor_courlan_filters.typeFilter.html | 11 + ...extractor_courlan_filters.validateUrl.html | 9 + ...tura_extractor_courlan_meta.addCache.html} | 4 +- ...ra_extractor_courlan_meta.clearCaches.html | 6 + ...actor_courlan_network.redirectionTest.html | 12 + ...xtractor_courlan_sampling.sampleUrls.html} | 4 +- ...actor_courlan_urlutils.extractDomain.html} | 9 +- ...extractor_courlan_urlutils.filterUrls.html | 10 + ...ctor_courlan_urlutils.fixRelativeUrls.html | 10 + ...extractor_courlan_urlutils.getBaseUrl.html | 9 + ...actor_courlan_urlutils.getHostAndPath.html | 9 + ...xtractor_courlan_urlutils.getHostinfo.html | 9 + ...extractor_courlan_urlutils.getTldinfo.html | 10 + ...extractor_courlan_urlutils.isExternal.html | 11 + ...xtractor_courlan_urlutils.isKnownLink.html | 10 + ...ctor_deduplication.contentFingerprint.html | 4 + ...extractor_deduplication.duplicateTest.html | 4 + ...tractor_deduplication.generateBowHash.html | 4 + ...tractor_deduplication.isSimilarDomain.html | 4 + ...tractor_downloads.addToCompressedDict.html | 4 + ...extractor_downloads.bufferedDownloads.html | 4 + ...ura_extractor_downloads.fetchResponse.html | 4 + ...filatura_extractor_downloads.fetchUrl.html | 4 + ...xtractor_downloads.loadDownloadBuffer.html | 4 + ..._extractor_external.compareExtraction.html | 4 + ...tura_extractor_external.justextRescue.html | 4 + ...atura_extractor_external.sanitizeTree.html | 4 + ...ilatura_extractor_feeds.findFeedUrls.html} | 2 +- ...filatura_extractor_feeds.tryHomepage.html} | 2 +- ...special_chars.convertHTMLSpecialChars.html | 13 + ...ractor_htmlprocessing.buildHtmlOutput.html | 4 + ...actor_htmlprocessing.collectLinkInfo.html} | 2 +- ...actor_htmlprocessing.convertDeletions.html | 4 + ...tractor_htmlprocessing.convertDetails.html | 4 + ...actor_htmlprocessing.convertHeadings.html} | 8 +- ...ctor_htmlprocessing.convertLineBreaks.html | 4 + ...xtractor_htmlprocessing.convertLists.html} | 2 +- ...xtractor_htmlprocessing.convertQuotes.html | 4 + ..._extractor_htmlprocessing.convertTags.html | 4 + ...xtractor_htmlprocessing.convertToHtml.html | 4 + ...or_htmlprocessing.deleteByLinkDensity.html | 4 + ...ractor_htmlprocessing.handleTextnode.html} | 2 +- ...ractor_htmlprocessing.linkDensityTest.html | 4 + ..._htmlprocessing.linkDensityTestTables.html | 4 + ..._extractor_htmlprocessing.processNode.html | 4 + ...ra_extractor_htmlprocessing.pruneHtml.html | 4 + ...or_htmlprocessing.pruneUnwantedNodes.html} | 2 +- ...extractor_htmlprocessing.treeCleaning.html | 4 + ..._extractor_json_metadata.extractJson.html} | 2 +- ...r_json_metadata.extractJsonParseError.html | 4 + ...ractor_json_metadata.normalizeAuthors.html | 4 + ...extractor_json_metadata.normalizeJson.html | 4 + ...actor_main_extractor.extractComments.html} | 2 +- ...tractor_main_extractor.extractContent.html | 4 + ...rafilatura_extractor_meta.resetCaches.html | 4 + ...ra_extractor_metadata.extractMetadata.html | 4 + ...r_readability_lxml.extractContentHTML.html | 4 + ...a_extractor_settings.argsToExtractor.html} | 2 +- ...tura_extractor_settings.setDateParams.html | 4 + ...ractor_sitemaps.extractRobotsSitemaps.html | 4 + ...extractor_sitemaps.findRobotsSitemaps.html | 4 + ...extractor_sitemaps.isPlausibleSitemap.html | 4 + ...ura_extractor_sitemaps.sitemapSearch.html} | 2 +- ...atura_extractor_spider.focusedCrawler.html | 4 + ...tura_extractor_utils.buildJsonOutput.html} | 2 +- ...atura_extractor_utils.buildTeiOutput.html} | 2 +- ...latura_extractor_utils.buildXmlOutput.html | 4 + ..._trafilatura_extractor_utils.checkTei.html | 4 + ...tura_extractor_utils.controlXmlOutput.html | 4 + ...latura_extractor_utils.deleteElement.html} | 2 +- ...tura_extractor_utils.mergeWithParent.html} | 2 +- ...ura_extractor_utils.normalizeUnicode.html} | 2 +- ...a_extractor_utils.removeEmptyElements.html | 4 + ...tura_extractor_utils.stripDoubleTags.html} | 2 +- ...ilatura_extractor_utils.textCharsTest.html | 4 + ...rafilatura_extractor_utils.textfilter.html | 4 + .../src_trafilatura_extractor_utils.trim.html | 4 + ...atura_extractor_utils.writeFullheader.html | 4 + ...filatura_extractor_utils.writeTeitree.html | 4 + ...trafilatura_extractor_utils.xmlToTxt.html} | 2 +- ...ilatura_extractor_xml.buildJsonOutput.html | 4 + ...ilatura_extractor_xml.buildTeiOutput.html} | 2 +- ...filatura_extractor_xml.buildXmlOutput.html | 4 + ...rc_trafilatura_extractor_xml.checkTei.html | 4 + ...latura_extractor_xml.controlXmlOutput.html | 4 + ...afilatura_extractor_xml.deleteElement.html | 4 + ...ilatura_extractor_xml.mergeWithParent.html | 4 + ...ura_extractor_xml.removeEmptyElements.html | 4 + ...ilatura_extractor_xml.stripDoubleTags.html | 4 + docs/index.html | 48 +- ...te_human_names_recognize.AuthorObject.html | 8 +- ...tent_html_to_content.ExtractedContent.html | 18 + ...url_to_content_url_to_content.Article.html | 24 +- ...o_content_youtube_embed.YouTubePlayer.html | 74 +- ...aph_embeddings_to_graph.PlotDataPoint.html | 10 + .../src_tokenize_tokenize_topics.Token.html | 8 +- docs/modules/index.html | 14 +- .../src_autocomplete_autocomplete.html | 2 +- .../src_chrome_extension_allow_cors.html | 2 +- ...rc_dataset_import_compile_topic_model.html | 2 +- ...src_dataset_import_compress_json_jz64.html | 2 +- .../src_dataset_import_dictionary_import.html | 2 +- ...src_dataset_import_human_names_import.html | 2 +- .../src_dataset_import_metadata_stats.html | 2 +- ...ataset_import_misspelled_typos_import.html | 2 +- .../src_dataset_import_quora_import.html | 2 +- ..._dataset_import_term_frequency_import.html | 2 +- ...dataset_import_wikipage_titles_import.html | 2 +- .../modules/src_extract_content_baseline.html | 9 - docs/modules/src_extract_content_core.html | 8 - .../src_extract_content_courlan-1.html | 31 - docs/modules/src_extract_content_courlan.html | 31 - .../src_extract_content_courlan_clean.html | 11 - .../src_extract_content_courlan_filters.html | 14 - .../src_extract_content_courlan_settings.html | 8 - .../src_extract_content_courlan_urlutils.html | 13 - .../src_extract_content_deduplication.html | 10 - .../src_extract_content_htmldate-1.html | 5 - .../src_extract_content_htmldate.export_.html | 4 - .../src_extract_content_htmldate_core.html | 15 - ...c_extract_content_htmldate_extractors.html | 25 - .../src_extract_content_htmldate_meta.html | 5 - ...src_extract_content_htmldate_settings.html | 9 - .../src_extract_content_htmldate_utils.html | 16 - ...c_extract_content_htmldate_validators.html | 14 - .../src_extract_content_json_metadata.html | 8 - .../src_extract_content_readability_lxml.html | 5 - .../modules/src_extract_content_settings.html | 23 - .../modules/src_extract_content_sitemaps.html | 8 - docs/modules/src_extract_content_spider.html | 7 - docs/modules/src_extract_content_utils.html | 18 - docs/modules/src_extract_content_xml.html | 13 - docs/modules/src_extract_content_xpaths.html | 17 - ...extractor_html_to_cite_extract_author.html | 2 +- ...c_extractor_html_to_cite_extract_cite.html | 2 +- ...c_extractor_html_to_cite_extract_date.html | 2 +- ...extractor_html_to_cite_extract_source.html | 2 +- ..._extractor_html_to_cite_extract_title.html | 2 +- ...or_html_to_cite_human_names_recognize.html | 2 +- ...tractor_html_to_cite_metadata_to_cite.html | 2 +- ..._extractor_html_to_cite_url_to_domain.html | 2 +- ...extractor_html_to_cite_url_to_favicon.html | 2 +- ...actor_html_to_content_extract_content.html | 5 - ...t_extract_content_extractor1_content.html} | 3 +- ...nt_extract_content_extractor2_content.html | 5 + ...act_content_extractor2_content_utils.html} | 2 +- ...or_html_to_content_html_special_chars.html | 2 +- ...or_html_to_content_html_to_basic_html.html | 2 +- ...actor_html_to_content_html_to_content.html | 3 +- ...tractor_url_to_content_pdf_to_content.html | 2 +- ...c_extractor_url_to_content_scrape_url.html | 2 +- ...tractor_url_to_content_url_to_content.html | 2 +- ...xtractor_url_to_content_youtube_embed.html | 2 +- ...ractor_url_to_content_youtube_to_text.html | 2 +- .../src_graph_embeddings_to_graph.html | 12 + ...ent_meta.html => src_graph_save_hnsw.html} | 2 +- docs/modules/src_match_compare_letters.html | 2 +- docs/modules/src_match_match_quasar.html | 2 +- docs/modules/src_match_softmax.html | 2 +- .../src_match_weigh_relevance_frequency.html | 2 +- .../modules/src_search_web_search_stream.html | 2 +- docs/modules/src_search_web_search_web.html | 2 +- .../src_search_web_search_wikipedia.html | 2 +- .../src_similarity_similarity_concept.html | 3 +- docs/modules/src_tokenize_sentences.html | 2 +- docs/modules/src_tokenize_stopwords.html | 2 +- docs/modules/src_tokenize_text_to_chunks.html | 2 +- .../modules/src_tokenize_tokenize_topics.html | 2 +- .../src_tokenize_word_to_root_stem.html | 2 +- ...topic_distribution_topic_distribution.html | 2 +- docs/modules/src_topics_ngrams.html | 2 +- .../src_topics_rank_sentences_keyphrases.html | 2 +- .../src_topics_seektopic_keyphrases.html | 2 +- .../src_trafilatura_extractor_baseline.html | 9 + .../src_trafilatura_extractor_core.html | 8 + .../src_trafilatura_extractor_courlan-1.html | 31 + .../src_trafilatura_extractor_courlan.html | 31 + ...c_trafilatura_extractor_courlan_clean.html | 11 + ...rc_trafilatura_extractor_courlan_core.html | 7 + ...trafilatura_extractor_courlan_filters.html | 14 + ...rc_trafilatura_extractor_courlan_meta.html | 6 + ...rafilatura_extractor_courlan_network.html} | 2 +- ...afilatura_extractor_courlan_sampling.html} | 3 +- ...rafilatura_extractor_courlan_settings.html | 8 + ...rafilatura_extractor_courlan_urlstore.html | 5 + ...rafilatura_extractor_courlan_urlutils.html | 13 + ...c_trafilatura_extractor_deduplication.html | 10 + ... src_trafilatura_extractor_downloads.html} | 7 +- ...> src_trafilatura_extractor_external.html} | 21 +- ...l => src_trafilatura_extractor_feeds.html} | 5 +- ...ilatura_extractor_html_special_chars.html} | 2 +- .../src_trafilatura_extractor_htmldate-1.html | 5 + ...rafilatura_extractor_htmldate.export_.html | 4 + .../src_trafilatura_extractor_htmldate.html | 6 + ...c_trafilatura_extractor_htmldate_core.html | 15 + ...ilatura_extractor_htmldate_extractors.html | 25 + ...c_trafilatura_extractor_htmldate_meta.html | 5 + ...afilatura_extractor_htmldate_settings.html | 9 + ..._trafilatura_extractor_htmldate_utils.html | 16 + ...ilatura_extractor_htmldate_validators.html | 14 + ..._trafilatura_extractor_htmlprocessing.html | 22 + ...c_trafilatura_extractor_json_metadata.html | 8 + ..._trafilatura_extractor_main_extractor.html | 6 + ...ml => src_trafilatura_extractor_meta.html} | 2 +- ...> src_trafilatura_extractor_metadata.html} | 3 +- ...rc_trafilatura_extractor_readability.html} | 2 +- ...afilatura_extractor_readability_lxml.html} | 2 +- .../src_trafilatura_extractor_settings.html | 23 + .../src_trafilatura_extractor_sitemaps.html | 8 + ... => src_trafilatura_extractor_spider.html} | 6 +- ...afilatura_extractor_test_extract_test.html | 4 + .../src_trafilatura_extractor_utils.html | 20 + ...tml => src_trafilatura_extractor_xml.html} | 15 +- ... => src_trafilatura_extractor_xpaths.html} | 15 +- ...ct_content_courlan_settings.BLACKLIST.html | 4 - ..._content_courlan_settings.LANG_PARAMS.html | 4 - ...rc_extract_content_htmldate.export_-1.html | 4 - ...tract_content_settings.DEFAULT_CONFIG.html | 4 - ...act_content_settings.MANUALLY_CLEANED.html | 4 - ...tent_settings.MAX_FILES_PER_DIRECTORY.html | 4 - ...rc_extract_content_settings.MAX_LINKS.html | 4 - ...ct_content_settings.MAX_SITEMAPS_SEEN.html | 4 - ...ct_content_settings.SUPPORTED_FORMATS.html | 4 - ..._extract_content_settings.TAG_CATALOG.html | 4 - .../src_extract_content_spider.URL_STORE.html | 4 - ..._content_xpaths.AUTHOR_DISCARD_XPATHS.html | 4 - ..._extract_content_xpaths.AUTHOR_XPATHS.html | 4 - ...ract_content_xpaths.CATEGORIES_XPATHS.html | 4 - ..._content_xpaths.OVERALL_DISCARD_XPATH.html | 4 - ...rc_extract_content_xpaths.TAGS_XPATHS.html | 4 - ...t_content_xpaths.TEASER_DISCARD_XPATH.html | 4 - ...c_extract_content_xpaths.TITLE_XPATHS.html | 4 - ...actor_courlan_settings.ALLOWED_PARAMS.html | 4 + ..._extractor_courlan_settings.BLACKLIST.html | 4 + ...xtractor_courlan_settings.LANG_PARAMS.html | 4 + ...tractor_courlan_settings.TARGET_LANGS.html | 4 + ...filatura_extractor_htmldate.export_-1.html | 4 + ...extractor_settings.BASIC_CLEAN_XPATH.html} | 2 +- ...a_extractor_settings.CUT_EMPTY_ELEMS.html} | 2 +- ...ura_extractor_settings.DEFAULT_CONFIG.html | 4 + ...tura_extractor_settings.FILENAME_LEN.html} | 2 +- ...extractor_settings.JUSTEXT_LANGUAGES.html} | 2 +- ...filatura_extractor_settings.LRU_SIZE.html} | 2 +- ..._extractor_settings.MANUALLY_CLEANED.html} | 2 +- ..._extractor_settings.MANUALLY_STRIPPED.html | 4 + ...tor_settings.MAX_FILES_PER_DIRECTORY.html} | 2 +- ...ilatura_extractor_settings.MAX_LINKS.html} | 2 +- ...extractor_settings.MAX_SITEMAPS_SEEN.html} | 2 +- ...ra_extractor_settings.PARALLEL_CORES.html} | 2 +- ...extractor_settings.SUPPORTED_FMT_CLI.html} | 2 +- ..._extractor_settings.SUPPORTED_FORMATS.html | 4 + ...latura_extractor_settings.TAG_CATALOG.html | 4 + ...afilatura_extractor_spider.URL_STORE.html} | 2 +- ...xtractor_xpaths.AUTHOR_DISCARD_XPATHS.html | 4 + ...latura_extractor_xpaths.AUTHOR_XPATHS.html | 4 + ...filatura_extractor_xpaths.BODY_XPATH.html} | 2 +- ...ra_extractor_xpaths.CATEGORIES_XPATHS.html | 4 + ...tractor_xpaths.COMMENTS_DISCARD_XPATH.html | 4 + ...atura_extractor_xpaths.COMMENTS_XPATH.html | 4 + ...tractor_xpaths.DISCARD_IMAGE_ELEMENTS.html | 4 + ...xtractor_xpaths.OVERALL_DISCARD_XPATH.html | 4 + ...ractor_xpaths.PRECISION_DISCARD_XPATH.html | 4 + ...xtractor_xpaths.REMOVE_COMMENTS_XPATH.html | 4 + ...ilatura_extractor_xpaths.TAGS_XPATHS.html} | 2 +- ...extractor_xpaths.TEASER_DISCARD_XPATH.html | 4 + ...ilatura_extractor_xpaths.TITLE_XPATHS.html | 4 + index.js | 40 +- package.json | 31 +- pnpm-lock.yaml | 2821 +++++++++++++++++ readme.md | 47 +- src/autocomplete/autocomplete.js | 2 +- src/dataset-import/compile-topic-model.js | 2 +- src/dataset-import/compress-json-jz64.js | 4 +- src/extract-content/python/baseline.py | 121 - src/extract-content/python/clean.py | 207 -- src/extract-content/python/core.py | 364 --- src/extract-content/python/courlan-core.py | 256 -- src/extract-content/python/deduplication.py | 253 -- src/extract-content/python/downloads.py | 474 --- src/extract-content/python/external.py | 189 -- src/extract-content/python/extractors.py | 515 --- src/extract-content/python/feeds.py | 312 -- src/extract-content/python/filters.py | 286 -- src/extract-content/python/htmldate-core.py | 982 ------ src/extract-content/python/htmlprocessing.py | 412 --- src/extract-content/python/json_metadata.py | 268 -- src/extract-content/python/main_extractor.py | 666 ---- src/extract-content/python/meta (1).py | 14 - src/extract-content/python/meta (2).py | 40 - src/extract-content/python/meta.py | 32 - src/extract-content/python/metadata.py | 496 --- src/extract-content/python/network.py | 71 - .../python/readability_lxml.py | 520 --- src/extract-content/python/sampling.py | 73 - src/extract-content/python/settings (1).py | 109 - src/extract-content/python/settings (2).py | 41 - src/extract-content/python/settings.py | 282 -- src/extract-content/python/sitemaps.py | 301 -- src/extract-content/python/spider.py | 351 -- src/extract-content/python/urlstore.py | 575 ---- src/extract-content/python/urlutils.py | 173 - src/extract-content/python/utils (1).py | 260 -- src/extract-content/python/utils.py | 445 --- src/extract-content/python/validators.py | 200 -- src/extract-content/python/xml.py | 611 ---- src/extract-content/python/xpaths.py | 267 -- src/extractor/html-to-cite/url-to-favicon.js | 2 +- .../html-to-content/extract-content.js | 222 -- .../extract-selectors-per-domain.json} | 0 .../extract-content/extractor1-content.js | 391 +++ .../extractor2-content-utils.js | 743 +++++ .../extract-content/extractor2-content.js | 820 +++++ .../html-to-content/html-special-chars.js | 7 +- .../html-to-content/html-to-basic-html.js | 13 +- .../html-to-content/html-to-content.js | 73 +- src/extractor/html-to-content/readability2.js | 303 -- .../url-to-content/pdf-to-content.js | 10 +- src/extractor/url-to-content/scrape-url.js | 26 +- .../url-to-content/url-to-content.js | 18 +- .../url-to-content/youtube-to-text.js | 23 +- src/graph/embeddings-to-graph.js | 172 + src/graph/save-hnsw.js | 32 + src/match/match-quasar.js | 12 +- src/match/softmax.js | 6 +- src/match/weigh-relevance-frequency.js | 2 +- src/search-web/search-stream.js | 15 +- src/search-web/search-web.js | 4 +- src/search-web/search-wikipedia.js | 2 +- src/similarity/similarity-concept.js | 64 +- src/tokenize/sentences.js | 4 +- src/tokenize/tokenize-topics.js | 4 +- src/topic-distribution/topic-distribution.js | 2 +- src/topics/seektopic-keyphrases.js | 2 +- src/trafilatura-extractor/.gitignore | 175 + .../baseline.js | 0 .../core.js | 0 .../courlan/clean.js | 0 .../courlan/core.js | 0 .../courlan/filters.js | 0 .../courlan/index.js | 0 .../courlan/meta.js | 0 .../courlan/network.js | 0 .../courlan/sampling.js | 0 .../courlan/settings.js | 0 .../courlan/urlstore.js | 0 .../courlan/urlutils.js | 0 .../deduplication.js | 0 .../downloads.js | 0 .../external.js | 0 .../feeds.js | 0 .../html-special-chars.js | 74 + .../htmldate/core.js | 13 - .../htmldate/extractors.js | 0 .../htmldate/index.js | 0 .../htmldate/meta.js | 0 .../htmldate/settings.js | 0 .../htmldate/utils.js | 0 .../htmldate/validators.js | 0 .../htmlprocessing.js | 0 src/trafilatura-extractor/jsconfig.json | 27 + .../json_metadata.js | 0 .../main_extractor.js | 0 .../meta.js | 0 .../metadata.js | 0 src/trafilatura-extractor/package.json | 19 + .../readability.js | 31 +- .../readability_lxml.js | 0 .../settings.js | 2 +- .../sitemaps.js | 0 .../spider.js | 0 .../test/extract.test.js | 28 + .../utils.js | 0 .../xml.js | 0 .../xpaths.js | 0 test/data/extract-article.test.js | 2 +- test/embedding.test.js | 89 + test/extractor-test/add-score.test.js | 23 + test/extractor-test/add-to-parent.test.js | 17 + test/extractor-test/extractor.test.js | 26 + .../extractor-test/find-top-candidate.test.js | 70 + test/extractor-test/get-or-init-score.test.js | 55 + test/extractor-test/get-score.test.js | 20 + test/extractor-test/get-weight.test.js | 92 + test/extractor-test/score-commas.test.js | 18 + test/extractor-test/score-content.test.js | 90 + test/extractor-test/score-length.test.js | 21 + test/extractor-test/score-node.test.js | 101 + test/extractor-test/score-parag.test.js | 39 + test/extractor-test/set-score.test.js | 19 + test/foo.dat | Bin 1856 -> 0 bytes test/graph.test.js | 32 + test/hnsw.js | 45 - test/readability.test.js | 37 +- test/relevace-concept-vector.test.js | 6 +- test/topic-distribution.test.js | 2 +- test/vectors.dat | Bin 8496 -> 0 bytes tsconfig.json | 2 +- web-app/package.json | 7 +- web-app/src/components/Home/Graph.svelte | 86 + web-app/src/components/Home/Home.svelte | 144 +- web-app/src/components/Home/ReadView.svelte | 2 +- 596 files changed, 8373 insertions(+), 12754 deletions(-) delete mode 100644 docs/classes/src_extract_content_core.Document.html delete mode 100644 docs/classes/src_extract_content_core.Extractor.html delete mode 100644 docs/classes/src_extract_content_courlan_urlstore.UrlStore.html delete mode 100644 docs/classes/src_extract_content_deduplication.LRUCache.html delete mode 100644 docs/classes/src_extract_content_deduplication.Simhash.html delete mode 100644 docs/classes/src_extract_content_downloads.Response.html delete mode 100644 docs/classes/src_extract_content_settings.Document.html delete mode 100644 docs/classes/src_extract_content_settings.Extractor.html delete mode 100644 docs/classes/src_extract_content_spider.CrawlParameters.html create mode 100644 docs/classes/src_trafilatura_extractor_core.Document.html create mode 100644 docs/classes/src_trafilatura_extractor_core.Extractor.html create mode 100644 docs/classes/src_trafilatura_extractor_courlan_urlstore.UrlStore.html create mode 100644 docs/classes/src_trafilatura_extractor_deduplication.LRUCache.html create mode 100644 docs/classes/src_trafilatura_extractor_deduplication.Simhash.html create mode 100644 docs/classes/src_trafilatura_extractor_downloads.Response.html rename docs/classes/{src_extractor_html_to_content_readability.Readability.html => src_trafilatura_extractor_readability.Readability.html} (55%) create mode 100644 docs/classes/src_trafilatura_extractor_settings.Document.html create mode 100644 docs/classes/src_trafilatura_extractor_settings.Extractor.html create mode 100644 docs/classes/src_trafilatura_extractor_spider.CrawlParameters.html delete mode 100644 docs/functions/src_extract_content_baseline.baseline.html delete mode 100644 docs/functions/src_extract_content_baseline.basicCleaning.html delete mode 100644 docs/functions/src_extract_content_baseline.loadHtml.html delete mode 100644 docs/functions/src_extract_content_baseline.trim.html delete mode 100644 docs/functions/src_extract_content_core.bareExtraction.html delete mode 100644 docs/functions/src_extract_content_core.extract.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.cleanQuery.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.cleanUrl.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.decodePunycode.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.normalizeFragment.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.normalizePart.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.normalizeUrl.html delete mode 100644 docs/functions/src_extract_content_courlan_clean.scrubUrl.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.basicFilter.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.domainFilter.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.extensionFilter.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.isNavigationPage.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.isNotCrawlable.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.isValidUrl.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.langFilter.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.pathFilter.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.typeFilter.html delete mode 100644 docs/functions/src_extract_content_courlan_filters.validateUrl.html delete mode 100644 docs/functions/src_extract_content_courlan_meta.addCache.html delete mode 100644 docs/functions/src_extract_content_courlan_meta.clearCaches.html delete mode 100644 docs/functions/src_extract_content_courlan_network.redirectionTest.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.extractDomain.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.filterUrls.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.getBaseUrl.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.getHostAndPath.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.getHostinfo.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.getTldinfo.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.isExternal.html delete mode 100644 docs/functions/src_extract_content_courlan_urlutils.isKnownLink.html delete mode 100644 docs/functions/src_extract_content_deduplication.contentFingerprint.html delete mode 100644 docs/functions/src_extract_content_deduplication.isSimilarDomain.html delete mode 100644 docs/functions/src_extract_content_downloads.addToCompressedDict.html delete mode 100644 docs/functions/src_extract_content_downloads.bufferedDownloads.html delete mode 100644 docs/functions/src_extract_content_downloads.fetchResponse.html delete mode 100644 docs/functions/src_extract_content_downloads.fetchUrl.html delete mode 100644 docs/functions/src_extract_content_downloads.loadDownloadBuffer.html delete mode 100644 docs/functions/src_extract_content_external.compareExtraction.html delete mode 100644 docs/functions/src_extract_content_external.justextRescue.html delete mode 100644 docs/functions/src_extract_content_external.sanitizeTree.html delete mode 100644 docs/functions/src_extract_content_feeds.findFeedUrls.html delete mode 100644 docs/functions/src_extract_content_feeds.tryHomepage.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.buildHtmlOutput.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.collectLinkInfo.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.convertDeletions.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.convertDetails.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.convertLists.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.convertQuotes.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.convertToHtml.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.deleteByLinkDensity.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.linkDensityTest.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.linkDensityTestTables.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.pruneHtml.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.pruneUnwantedNodes.html delete mode 100644 docs/functions/src_extract_content_htmlprocessing.treeCleaning.html delete mode 100644 docs/functions/src_extract_content_json_metadata.extractJson.html delete mode 100644 docs/functions/src_extract_content_json_metadata.extractJsonParseError.html delete mode 100644 docs/functions/src_extract_content_json_metadata.normalizeAuthors.html delete mode 100644 docs/functions/src_extract_content_main_extractor.extractComments.html delete mode 100644 docs/functions/src_extract_content_main_extractor.extractContent.html delete mode 100644 docs/functions/src_extract_content_meta.resetCaches.html delete mode 100644 docs/functions/src_extract_content_metadata.extractMetadata.html delete mode 100644 docs/functions/src_extract_content_settings.argsToExtractor.html delete mode 100644 docs/functions/src_extract_content_sitemaps.extractRobotsSitemaps.html delete mode 100644 docs/functions/src_extract_content_sitemaps.findRobotsSitemaps.html delete mode 100644 docs/functions/src_extract_content_sitemaps.isPlausibleSitemap.html delete mode 100644 docs/functions/src_extract_content_sitemaps.sitemapSearch.html delete mode 100644 docs/functions/src_extract_content_spider.focusedCrawler.html delete mode 100644 docs/functions/src_extract_content_utils.controlXmlOutput.html delete mode 100644 docs/functions/src_extract_content_utils.deleteElement.html delete mode 100644 docs/functions/src_extract_content_utils.mergeWithParent.html delete mode 100644 docs/functions/src_extract_content_utils.removeEmptyElements.html delete mode 100644 docs/functions/src_extract_content_utils.stripDoubleTags.html delete mode 100644 docs/functions/src_extract_content_utils.textfilter.html delete mode 100644 docs/functions/src_extract_content_utils.trim.html delete mode 100644 docs/functions/src_extract_content_utils.xmlToTxt.html delete mode 100644 docs/functions/src_extract_content_xml.buildJsonOutput.html delete mode 100644 docs/functions/src_extract_content_xml.buildTeiOutput.html delete mode 100644 docs/functions/src_extract_content_xml.checkTei.html delete mode 100644 docs/functions/src_extract_content_xml.deleteElement.html delete mode 100644 docs/functions/src_extract_content_xml.removeEmptyElements.html delete mode 100644 docs/functions/src_extractor_html_to_content_extract_content.extractMainContent.html create mode 100644 docs/functions/src_extractor_html_to_content_extract_content_extractor1_content.extractContentHTML.html create mode 100644 docs/functions/src_extractor_html_to_content_extract_content_extractor2_content.extractContentHTML2.html delete mode 100644 docs/functions/src_extractor_html_to_content_html_to_content.extractContent.html create mode 100644 docs/functions/src_extractor_html_to_content_html_to_content.extractContentAndCite.html delete mode 100644 docs/functions/src_extractor_html_to_content_readability2.extractContentHTML.html rename docs/functions/{src_extractor_url_to_content_pdf_to_content.extractPDF.html => src_extractor_url_to_content_pdf_to_content.convertPDFToHTML.html} (55%) create mode 100644 docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToHNSW.html create mode 100644 docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToUMAP.html create mode 100644 docs/functions/src_graph_embeddings_to_graph.convertTextToEmbeddingVector.html create mode 100644 docs/functions/src_graph_embeddings_to_graph.cosineSimilarity.html create mode 100644 docs/functions/src_graph_embeddings_to_graph.getAllEmbeddings.html create mode 100644 docs/functions/src_graph_embeddings_to_graph.getEmbeddingPipeline.html create mode 100644 docs/functions/src_graph_embeddings_to_graph.searchWithQuery.html create mode 100644 docs/functions/src_graph_save_hnsw.convertEmbeddingsIndexToBase64.html delete mode 100644 docs/functions/src_similarity_similarity_concept.vectorizeTextAsConcept.html create mode 100644 docs/functions/src_trafilatura_extractor_baseline.baseline.html create mode 100644 docs/functions/src_trafilatura_extractor_baseline.basicCleaning.html create mode 100644 docs/functions/src_trafilatura_extractor_baseline.html2txt.html create mode 100644 docs/functions/src_trafilatura_extractor_baseline.loadHtml.html create mode 100644 docs/functions/src_trafilatura_extractor_baseline.trim.html rename docs/{variables/src_extract_content_xpaths.COMMENTS_XPATH.html => functions/src_trafilatura_extractor_core.bareExtraction.html} (75%) create mode 100644 docs/functions/src_trafilatura_extractor_core.extract.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.cleanQuery.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.cleanUrl.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.decodePunycode.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.normalizeFragment.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.normalizePart.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.normalizeUrl.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_clean.scrubUrl.html rename docs/functions/{src_extract_content_courlan_core.checkUrl.html => src_trafilatura_extractor_courlan_core.checkUrl.html} (58%) rename docs/functions/{src_extract_content_courlan_core.extractLinks.html => src_trafilatura_extractor_courlan_core.extractLinks.html} (67%) rename docs/functions/{src_extract_content_courlan_core.filterLinks.html => src_trafilatura_extractor_courlan_core.filterLinks.html} (60%) create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.basicFilter.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.domainFilter.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.extensionFilter.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.isNavigationPage.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.isNotCrawlable.html rename docs/{variables/src_extract_content_xpaths.BODY_XPATH.html => functions/src_trafilatura_extractor_courlan_filters.isValidUrl.html} (75%) create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.langFilter.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.pathFilter.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.typeFilter.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_filters.validateUrl.html rename docs/functions/{src_extract_content_baseline.html2txt.html => src_trafilatura_extractor_courlan_meta.addCache.html} (77%) create mode 100644 docs/functions/src_trafilatura_extractor_courlan_meta.clearCaches.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_network.redirectionTest.html rename docs/functions/{src_extract_content_courlan_sampling.sampleUrls.html => src_trafilatura_extractor_courlan_sampling.sampleUrls.html} (57%) rename docs/functions/{src_extract_content_deduplication.duplicateTest.html => src_trafilatura_extractor_courlan_urlutils.extractDomain.html} (66%) create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.filterUrls.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.fixRelativeUrls.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.getBaseUrl.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.getHostAndPath.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.getHostinfo.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.getTldinfo.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.isExternal.html create mode 100644 docs/functions/src_trafilatura_extractor_courlan_urlutils.isKnownLink.html create mode 100644 docs/functions/src_trafilatura_extractor_deduplication.contentFingerprint.html create mode 100644 docs/functions/src_trafilatura_extractor_deduplication.duplicateTest.html create mode 100644 docs/functions/src_trafilatura_extractor_deduplication.generateBowHash.html create mode 100644 docs/functions/src_trafilatura_extractor_deduplication.isSimilarDomain.html create mode 100644 docs/functions/src_trafilatura_extractor_downloads.addToCompressedDict.html create mode 100644 docs/functions/src_trafilatura_extractor_downloads.bufferedDownloads.html create mode 100644 docs/functions/src_trafilatura_extractor_downloads.fetchResponse.html create mode 100644 docs/functions/src_trafilatura_extractor_downloads.fetchUrl.html create mode 100644 docs/functions/src_trafilatura_extractor_downloads.loadDownloadBuffer.html create mode 100644 docs/functions/src_trafilatura_extractor_external.compareExtraction.html create mode 100644 docs/functions/src_trafilatura_extractor_external.justextRescue.html create mode 100644 docs/functions/src_trafilatura_extractor_external.sanitizeTree.html rename docs/{variables/src_extract_content_courlan_settings.TARGET_LANGS.html => functions/src_trafilatura_extractor_feeds.findFeedUrls.html} (71%) rename docs/functions/{src_extract_content_htmlprocessing.processNode.html => src_trafilatura_extractor_feeds.tryHomepage.html} (78%) create mode 100644 docs/functions/src_trafilatura_extractor_html_special_chars.convertHTMLSpecialChars.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.buildHtmlOutput.html rename docs/functions/{src_extract_content_htmlprocessing.convertHeadings.html => src_trafilatura_extractor_htmlprocessing.collectLinkInfo.html} (78%) create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.convertDeletions.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.convertDetails.html rename docs/functions/{src_extract_content_courlan_urlutils.fixRelativeUrls.html => src_trafilatura_extractor_htmlprocessing.convertHeadings.html} (73%) create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.convertLineBreaks.html rename docs/{variables/src_extract_content_settings.FILENAME_LEN.html => functions/src_trafilatura_extractor_htmlprocessing.convertLists.html} (79%) create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.convertQuotes.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.convertTags.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.convertToHtml.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.deleteByLinkDensity.html rename docs/{variables/src_extract_content_settings.PARALLEL_CORES.html => functions/src_trafilatura_extractor_htmlprocessing.handleTextnode.html} (71%) create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.linkDensityTest.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.linkDensityTestTables.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.processNode.html create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.pruneHtml.html rename docs/functions/{src_extract_content_readability_lxml.extractContentHTML.html => src_trafilatura_extractor_htmlprocessing.pruneUnwantedNodes.html} (74%) create mode 100644 docs/functions/src_trafilatura_extractor_htmlprocessing.treeCleaning.html rename docs/functions/{src_extract_content_utils.buildTeiOutput.html => src_trafilatura_extractor_json_metadata.extractJson.html} (50%) create mode 100644 docs/functions/src_trafilatura_extractor_json_metadata.extractJsonParseError.html create mode 100644 docs/functions/src_trafilatura_extractor_json_metadata.normalizeAuthors.html create mode 100644 docs/functions/src_trafilatura_extractor_json_metadata.normalizeJson.html rename docs/functions/{src_extract_content_deduplication.generateBowHash.html => src_trafilatura_extractor_main_extractor.extractComments.html} (78%) create mode 100644 docs/functions/src_trafilatura_extractor_main_extractor.extractContent.html create mode 100644 docs/functions/src_trafilatura_extractor_meta.resetCaches.html create mode 100644 docs/functions/src_trafilatura_extractor_metadata.extractMetadata.html create mode 100644 docs/functions/src_trafilatura_extractor_readability_lxml.extractContentHTML.html rename docs/{variables/src_extract_content_settings.CUT_EMPTY_ELEMS.html => functions/src_trafilatura_extractor_settings.argsToExtractor.html} (75%) create mode 100644 docs/functions/src_trafilatura_extractor_settings.setDateParams.html create mode 100644 docs/functions/src_trafilatura_extractor_sitemaps.extractRobotsSitemaps.html create mode 100644 docs/functions/src_trafilatura_extractor_sitemaps.findRobotsSitemaps.html create mode 100644 docs/functions/src_trafilatura_extractor_sitemaps.isPlausibleSitemap.html rename docs/functions/{src_extract_content_settings.setDateParams.html => src_trafilatura_extractor_sitemaps.sitemapSearch.html} (61%) create mode 100644 docs/functions/src_trafilatura_extractor_spider.focusedCrawler.html rename docs/functions/{src_extract_content_utils.writeFullheader.html => src_trafilatura_extractor_utils.buildJsonOutput.html} (77%) rename docs/functions/{src_extract_content_htmlprocessing.handleTextnode.html => src_trafilatura_extractor_utils.buildTeiOutput.html} (72%) create mode 100644 docs/functions/src_trafilatura_extractor_utils.buildXmlOutput.html create mode 100644 docs/functions/src_trafilatura_extractor_utils.checkTei.html create mode 100644 docs/functions/src_trafilatura_extractor_utils.controlXmlOutput.html rename docs/functions/{src_extract_content_json_metadata.normalizeJson.html => src_trafilatura_extractor_utils.deleteElement.html} (77%) rename docs/functions/{src_extract_content_xml.stripDoubleTags.html => src_trafilatura_extractor_utils.mergeWithParent.html} (76%) rename docs/functions/{src_extract_content_xml.controlXmlOutput.html => src_trafilatura_extractor_utils.normalizeUnicode.html} (77%) create mode 100644 docs/functions/src_trafilatura_extractor_utils.removeEmptyElements.html rename docs/functions/{src_extract_content_xml.mergeWithParent.html => src_trafilatura_extractor_utils.stripDoubleTags.html} (77%) create mode 100644 docs/functions/src_trafilatura_extractor_utils.textCharsTest.html create mode 100644 docs/functions/src_trafilatura_extractor_utils.textfilter.html create mode 100644 docs/functions/src_trafilatura_extractor_utils.trim.html create mode 100644 docs/functions/src_trafilatura_extractor_utils.writeFullheader.html create mode 100644 docs/functions/src_trafilatura_extractor_utils.writeTeitree.html rename docs/functions/{src_extract_content_utils.checkTei.html => src_trafilatura_extractor_utils.xmlToTxt.html} (78%) create mode 100644 docs/functions/src_trafilatura_extractor_xml.buildJsonOutput.html rename docs/functions/{src_extract_content_utils.buildXmlOutput.html => src_trafilatura_extractor_xml.buildTeiOutput.html} (80%) create mode 100644 docs/functions/src_trafilatura_extractor_xml.buildXmlOutput.html create mode 100644 docs/functions/src_trafilatura_extractor_xml.checkTei.html create mode 100644 docs/functions/src_trafilatura_extractor_xml.controlXmlOutput.html create mode 100644 docs/functions/src_trafilatura_extractor_xml.deleteElement.html create mode 100644 docs/functions/src_trafilatura_extractor_xml.mergeWithParent.html create mode 100644 docs/functions/src_trafilatura_extractor_xml.removeEmptyElements.html create mode 100644 docs/functions/src_trafilatura_extractor_xml.stripDoubleTags.html create mode 100644 docs/interfaces/src_extractor_html_to_content_html_to_content.ExtractedContent.html create mode 100644 docs/interfaces/src_graph_embeddings_to_graph.PlotDataPoint.html delete mode 100644 docs/modules/src_extract_content_baseline.html delete mode 100644 docs/modules/src_extract_content_core.html delete mode 100644 docs/modules/src_extract_content_courlan-1.html delete mode 100644 docs/modules/src_extract_content_courlan.html delete mode 100644 docs/modules/src_extract_content_courlan_clean.html delete mode 100644 docs/modules/src_extract_content_courlan_filters.html delete mode 100644 docs/modules/src_extract_content_courlan_settings.html delete mode 100644 docs/modules/src_extract_content_courlan_urlutils.html delete mode 100644 docs/modules/src_extract_content_deduplication.html delete mode 100644 docs/modules/src_extract_content_htmldate-1.html delete mode 100644 docs/modules/src_extract_content_htmldate.export_.html delete mode 100644 docs/modules/src_extract_content_htmldate_core.html delete mode 100644 docs/modules/src_extract_content_htmldate_extractors.html delete mode 100644 docs/modules/src_extract_content_htmldate_meta.html delete mode 100644 docs/modules/src_extract_content_htmldate_settings.html delete mode 100644 docs/modules/src_extract_content_htmldate_utils.html delete mode 100644 docs/modules/src_extract_content_htmldate_validators.html delete mode 100644 docs/modules/src_extract_content_json_metadata.html delete mode 100644 docs/modules/src_extract_content_readability_lxml.html delete mode 100644 docs/modules/src_extract_content_settings.html delete mode 100644 docs/modules/src_extract_content_sitemaps.html delete mode 100644 docs/modules/src_extract_content_spider.html delete mode 100644 docs/modules/src_extract_content_utils.html delete mode 100644 docs/modules/src_extract_content_xml.html delete mode 100644 docs/modules/src_extract_content_xpaths.html delete mode 100644 docs/modules/src_extractor_html_to_content_extract_content.html rename docs/modules/{src_extract_content_feeds.html => src_extractor_html_to_content_extract_content_extractor1_content.html} (51%) create mode 100644 docs/modules/src_extractor_html_to_content_extract_content_extractor2_content.html rename docs/{variables/src_extract_content_settings.LRU_SIZE.html => modules/src_extractor_html_to_content_extract_content_extractor2_content_utils.html} (56%) create mode 100644 docs/modules/src_graph_embeddings_to_graph.html rename docs/modules/{src_extract_content_meta.html => src_graph_save_hnsw.html} (53%) create mode 100644 docs/modules/src_trafilatura_extractor_baseline.html create mode 100644 docs/modules/src_trafilatura_extractor_core.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan-1.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan_clean.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan_core.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan_filters.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan_meta.html rename docs/modules/{src_extractor_html_to_content_readability.html => src_trafilatura_extractor_courlan_network.html} (89%) rename docs/modules/{src_extract_content_htmldate.html => src_trafilatura_extractor_courlan_sampling.html} (53%) create mode 100644 docs/modules/src_trafilatura_extractor_courlan_settings.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan_urlstore.html create mode 100644 docs/modules/src_trafilatura_extractor_courlan_urlutils.html create mode 100644 docs/modules/src_trafilatura_extractor_deduplication.html rename docs/modules/{src_extract_content_courlan_network.html => src_trafilatura_extractor_downloads.html} (73%) rename docs/modules/{src_extract_content_htmlprocessing.html => src_trafilatura_extractor_external.html} (55%) rename docs/modules/{src_extract_content_external.html => src_trafilatura_extractor_feeds.html} (51%) rename docs/modules/{src_extract_content_courlan_sampling.html => src_trafilatura_extractor_html_special_chars.html} (52%) create mode 100644 docs/modules/src_trafilatura_extractor_htmldate-1.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate.export_.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate_core.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate_extractors.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate_meta.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate_settings.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate_utils.html create mode 100644 docs/modules/src_trafilatura_extractor_htmldate_validators.html create mode 100644 docs/modules/src_trafilatura_extractor_htmlprocessing.html create mode 100644 docs/modules/src_trafilatura_extractor_json_metadata.html create mode 100644 docs/modules/src_trafilatura_extractor_main_extractor.html rename docs/modules/{src_extract_content_metadata.html => src_trafilatura_extractor_meta.html} (53%) rename docs/modules/{src_extract_content_main_extractor.html => src_trafilatura_extractor_metadata.html} (88%) rename docs/modules/{src_extract_content_courlan_urlstore.html => src_trafilatura_extractor_readability.html} (52%) rename docs/modules/{src_extractor_html_to_content_readability2.html => src_trafilatura_extractor_readability_lxml.html} (92%) create mode 100644 docs/modules/src_trafilatura_extractor_settings.html create mode 100644 docs/modules/src_trafilatura_extractor_sitemaps.html rename docs/modules/{src_extract_content_courlan_core.html => src_trafilatura_extractor_spider.html} (80%) create mode 100644 docs/modules/src_trafilatura_extractor_test_extract_test.html create mode 100644 docs/modules/src_trafilatura_extractor_utils.html rename docs/modules/{src_extract_content_downloads.html => src_trafilatura_extractor_xml.html} (72%) rename docs/modules/{src_extract_content_courlan_meta.html => src_trafilatura_extractor_xpaths.html} (61%) delete mode 100644 docs/variables/src_extract_content_courlan_settings.BLACKLIST.html delete mode 100644 docs/variables/src_extract_content_courlan_settings.LANG_PARAMS.html delete mode 100644 docs/variables/src_extract_content_htmldate.export_-1.html delete mode 100644 docs/variables/src_extract_content_settings.DEFAULT_CONFIG.html delete mode 100644 docs/variables/src_extract_content_settings.MANUALLY_CLEANED.html delete mode 100644 docs/variables/src_extract_content_settings.MAX_FILES_PER_DIRECTORY.html delete mode 100644 docs/variables/src_extract_content_settings.MAX_LINKS.html delete mode 100644 docs/variables/src_extract_content_settings.MAX_SITEMAPS_SEEN.html delete mode 100644 docs/variables/src_extract_content_settings.SUPPORTED_FORMATS.html delete mode 100644 docs/variables/src_extract_content_settings.TAG_CATALOG.html delete mode 100644 docs/variables/src_extract_content_spider.URL_STORE.html delete mode 100644 docs/variables/src_extract_content_xpaths.AUTHOR_DISCARD_XPATHS.html delete mode 100644 docs/variables/src_extract_content_xpaths.AUTHOR_XPATHS.html delete mode 100644 docs/variables/src_extract_content_xpaths.CATEGORIES_XPATHS.html delete mode 100644 docs/variables/src_extract_content_xpaths.OVERALL_DISCARD_XPATH.html delete mode 100644 docs/variables/src_extract_content_xpaths.TAGS_XPATHS.html delete mode 100644 docs/variables/src_extract_content_xpaths.TEASER_DISCARD_XPATH.html delete mode 100644 docs/variables/src_extract_content_xpaths.TITLE_XPATHS.html create mode 100644 docs/variables/src_trafilatura_extractor_courlan_settings.ALLOWED_PARAMS.html create mode 100644 docs/variables/src_trafilatura_extractor_courlan_settings.BLACKLIST.html create mode 100644 docs/variables/src_trafilatura_extractor_courlan_settings.LANG_PARAMS.html create mode 100644 docs/variables/src_trafilatura_extractor_courlan_settings.TARGET_LANGS.html create mode 100644 docs/variables/src_trafilatura_extractor_htmldate.export_-1.html rename docs/{functions/src_extract_content_htmlprocessing.convertLineBreaks.html => variables/src_trafilatura_extractor_settings.BASIC_CLEAN_XPATH.html} (79%) rename docs/{functions/src_extract_content_utils.buildJsonOutput.html => variables/src_trafilatura_extractor_settings.CUT_EMPTY_ELEMS.html} (76%) create mode 100644 docs/variables/src_trafilatura_extractor_settings.DEFAULT_CONFIG.html rename docs/{functions/src_extract_content_utils.writeTeitree.html => variables/src_trafilatura_extractor_settings.FILENAME_LEN.html} (79%) rename docs/variables/{src_extract_content_settings.JUSTEXT_LANGUAGES.html => src_trafilatura_extractor_settings.JUSTEXT_LANGUAGES.html} (51%) rename docs/variables/{src_extract_content_settings.MANUALLY_STRIPPED.html => src_trafilatura_extractor_settings.LRU_SIZE.html} (53%) rename docs/variables/{src_extract_content_xpaths.DISCARD_IMAGE_ELEMENTS.html => src_trafilatura_extractor_settings.MANUALLY_CLEANED.html} (53%) create mode 100644 docs/variables/src_trafilatura_extractor_settings.MANUALLY_STRIPPED.html rename docs/variables/{src_extract_content_xpaths.COMMENTS_DISCARD_XPATH.html => src_trafilatura_extractor_settings.MAX_FILES_PER_DIRECTORY.html} (53%) rename docs/variables/{src_extract_content_settings.SUPPORTED_FMT_CLI.html => src_trafilatura_extractor_settings.MAX_LINKS.html} (53%) rename docs/variables/{src_extract_content_settings.BASIC_CLEAN_XPATH.html => src_trafilatura_extractor_settings.MAX_SITEMAPS_SEEN.html} (88%) rename docs/{functions/src_extract_content_xml.buildXmlOutput.html => variables/src_trafilatura_extractor_settings.PARALLEL_CORES.html} (80%) rename docs/variables/{src_extract_content_xpaths.PRECISION_DISCARD_XPATH.html => src_trafilatura_extractor_settings.SUPPORTED_FMT_CLI.html} (53%) create mode 100644 docs/variables/src_trafilatura_extractor_settings.SUPPORTED_FORMATS.html create mode 100644 docs/variables/src_trafilatura_extractor_settings.TAG_CATALOG.html rename docs/variables/{src_extract_content_xpaths.REMOVE_COMMENTS_XPATH.html => src_trafilatura_extractor_spider.URL_STORE.html} (53%) create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.AUTHOR_DISCARD_XPATHS.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.AUTHOR_XPATHS.html rename docs/variables/{src_extract_content_courlan_settings.ALLOWED_PARAMS.html => src_trafilatura_extractor_xpaths.BODY_XPATH.html} (53%) create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.CATEGORIES_XPATHS.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.COMMENTS_DISCARD_XPATH.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.COMMENTS_XPATH.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.DISCARD_IMAGE_ELEMENTS.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.OVERALL_DISCARD_XPATH.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.PRECISION_DISCARD_XPATH.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.REMOVE_COMMENTS_XPATH.html rename docs/{functions/src_extract_content_htmlprocessing.convertTags.html => variables/src_trafilatura_extractor_xpaths.TAGS_XPATHS.html} (74%) create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.TEASER_DISCARD_XPATH.html create mode 100644 docs/variables/src_trafilatura_extractor_xpaths.TITLE_XPATHS.html create mode 100644 pnpm-lock.yaml delete mode 100644 src/extract-content/python/baseline.py delete mode 100644 src/extract-content/python/clean.py delete mode 100644 src/extract-content/python/core.py delete mode 100644 src/extract-content/python/courlan-core.py delete mode 100644 src/extract-content/python/deduplication.py delete mode 100644 src/extract-content/python/downloads.py delete mode 100644 src/extract-content/python/external.py delete mode 100644 src/extract-content/python/extractors.py delete mode 100644 src/extract-content/python/feeds.py delete mode 100644 src/extract-content/python/filters.py delete mode 100644 src/extract-content/python/htmldate-core.py delete mode 100644 src/extract-content/python/htmlprocessing.py delete mode 100644 src/extract-content/python/json_metadata.py delete mode 100644 src/extract-content/python/main_extractor.py delete mode 100644 src/extract-content/python/meta (1).py delete mode 100644 src/extract-content/python/meta (2).py delete mode 100644 src/extract-content/python/meta.py delete mode 100644 src/extract-content/python/metadata.py delete mode 100644 src/extract-content/python/network.py delete mode 100644 src/extract-content/python/readability_lxml.py delete mode 100644 src/extract-content/python/sampling.py delete mode 100644 src/extract-content/python/settings (1).py delete mode 100644 src/extract-content/python/settings (2).py delete mode 100644 src/extract-content/python/settings.py delete mode 100644 src/extract-content/python/sitemaps.py delete mode 100644 src/extract-content/python/spider.py delete mode 100644 src/extract-content/python/urlstore.py delete mode 100644 src/extract-content/python/urlutils.py delete mode 100644 src/extract-content/python/utils (1).py delete mode 100644 src/extract-content/python/utils.py delete mode 100644 src/extract-content/python/validators.py delete mode 100644 src/extract-content/python/xml.py delete mode 100644 src/extract-content/python/xpaths.py delete mode 100644 src/extractor/html-to-content/extract-content.js rename src/extractor/html-to-content/{specific-domain-extractors.json => extract-content/extract-selectors-per-domain.json} (100%) create mode 100644 src/extractor/html-to-content/extract-content/extractor1-content.js create mode 100644 src/extractor/html-to-content/extract-content/extractor2-content-utils.js create mode 100644 src/extractor/html-to-content/extract-content/extractor2-content.js delete mode 100644 src/extractor/html-to-content/readability2.js create mode 100644 src/graph/embeddings-to-graph.js create mode 100644 src/graph/save-hnsw.js create mode 100644 src/trafilatura-extractor/.gitignore rename src/{extract-content => trafilatura-extractor}/baseline.js (100%) rename src/{extract-content => trafilatura-extractor}/core.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/clean.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/core.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/filters.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/index.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/meta.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/network.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/sampling.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/settings.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/urlstore.js (100%) rename src/{extract-content => trafilatura-extractor}/courlan/urlutils.js (100%) rename src/{extract-content => trafilatura-extractor}/deduplication.js (100%) rename src/{extract-content => trafilatura-extractor}/downloads.js (100%) rename src/{extract-content => trafilatura-extractor}/external.js (100%) rename src/{extract-content => trafilatura-extractor}/feeds.js (100%) create mode 100644 src/trafilatura-extractor/html-special-chars.js rename src/{extract-content => trafilatura-extractor}/htmldate/core.js (98%) rename src/{extract-content => trafilatura-extractor}/htmldate/extractors.js (100%) rename src/{extract-content => trafilatura-extractor}/htmldate/index.js (100%) rename src/{extract-content => trafilatura-extractor}/htmldate/meta.js (100%) rename src/{extract-content => trafilatura-extractor}/htmldate/settings.js (100%) rename src/{extract-content => trafilatura-extractor}/htmldate/utils.js (100%) rename src/{extract-content => trafilatura-extractor}/htmldate/validators.js (100%) rename src/{extract-content => trafilatura-extractor}/htmlprocessing.js (100%) create mode 100644 src/trafilatura-extractor/jsconfig.json rename src/{extract-content => trafilatura-extractor}/json_metadata.js (100%) rename src/{extract-content => trafilatura-extractor}/main_extractor.js (100%) rename src/{extract-content => trafilatura-extractor}/meta.js (100%) rename src/{extract-content => trafilatura-extractor}/metadata.js (100%) create mode 100644 src/trafilatura-extractor/package.json rename src/{extractor/html-to-content => trafilatura-extractor}/readability.js (98%) rename src/{extract-content => trafilatura-extractor}/readability_lxml.js (100%) rename src/{extract-content => trafilatura-extractor}/settings.js (99%) rename src/{extract-content => trafilatura-extractor}/sitemaps.js (100%) rename src/{extract-content => trafilatura-extractor}/spider.js (100%) create mode 100644 src/trafilatura-extractor/test/extract.test.js rename src/{extract-content => trafilatura-extractor}/utils.js (100%) rename src/{extract-content => trafilatura-extractor}/xml.js (100%) rename src/{extract-content => trafilatura-extractor}/xpaths.js (100%) create mode 100644 test/embedding.test.js create mode 100644 test/extractor-test/add-score.test.js create mode 100644 test/extractor-test/add-to-parent.test.js create mode 100644 test/extractor-test/extractor.test.js create mode 100644 test/extractor-test/find-top-candidate.test.js create mode 100644 test/extractor-test/get-or-init-score.test.js create mode 100644 test/extractor-test/get-score.test.js create mode 100644 test/extractor-test/get-weight.test.js create mode 100644 test/extractor-test/score-commas.test.js create mode 100644 test/extractor-test/score-content.test.js create mode 100644 test/extractor-test/score-length.test.js create mode 100644 test/extractor-test/score-node.test.js create mode 100644 test/extractor-test/score-parag.test.js create mode 100644 test/extractor-test/set-score.test.js delete mode 100644 test/foo.dat create mode 100644 test/graph.test.js delete mode 100644 test/hnsw.js delete mode 100644 test/vectors.dat create mode 100644 web-app/src/components/Home/Graph.svelte diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml index eb709a4..284a97a 100644 --- a/.github/workflows/static.yml +++ b/.github/workflows/static.yml @@ -38,6 +38,18 @@ jobs: with: # Upload entire repository path: './docs/' - - name: Deploy to GitHub Pages + - name: Deploy Docs to GitHub Pages id: deployment uses: actions/deploy-pages@v4 + + test: + name: Run Unit Test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 # checkout the repo + - name: Download dependencies # execute tests in tests/ + run: | + npm install + - name: Execute tests # execute tests in tests/ + run: | + npm run test \ No newline at end of file diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js index 576cf71..6eb2050 100644 --- a/docs/assets/navigation.js +++ b/docs/assets/navigation.js @@ -1 +1 @@ -window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file +window.navigationData = "data:application/octet-stream;base64,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" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 3d7c0be..5707bc5 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file diff --git a/docs/classes/src_extract_content_core.Document.html b/docs/classes/src_extract_content_core.Document.html deleted file mode 100644 index b9452e6..0000000 --- a/docs/classes/src_extract_content_core.Document.html +++ /dev/null @@ -1,23 +0,0 @@ -Document | ai-research-agent

Constructors

  • Returns Document

Properties

author: string
body: any
categories: any[]
comments: string
commentsbody: any
date: string
description: string
fingerprint: string
hostname: string
id: string
license: string
raw_text: string
sitename: string
tags: any[]
text: string
title: string
url: string

Methods

diff --git a/docs/classes/src_extract_content_core.Extractor.html b/docs/classes/src_extract_content_core.Extractor.html deleted file mode 100644 index 26f7ad4..0000000 --- a/docs/classes/src_extract_content_core.Extractor.html +++ /dev/null @@ -1,25 +0,0 @@ -Extractor | ai-research-agent

Constructors

  • Parameters

    • options: {} = {}

      Returns Extractor

    Properties

    authorBlacklist: any
    comments: any
    config: any
    dateParams: any
    dedup: any
    fast: any
    formatting: any
    images: any
    lang: any
    links: any
    maxTreeSize: any
    onlyWithMetadata: any
    outputFormat: any
    precision: any
    recall: any
    tables: any
    teiValidation: any
    url: any
    urlBlacklist: any
    withMetadata: any
    diff --git a/docs/classes/src_extract_content_courlan_urlstore.UrlStore.html b/docs/classes/src_extract_content_courlan_urlstore.UrlStore.html deleted file mode 100644 index ff99fd3..0000000 --- a/docs/classes/src_extract_content_courlan_urlstore.UrlStore.html +++ /dev/null @@ -1,42 +0,0 @@ -UrlStore | ai-research-agent

    Constructors

    • Parameters

      • __namedParameters: {
            compressed: boolean;
            language: any;
            strict: boolean;
            trailing: boolean;
            verbose: boolean;
        } = {}
        • compressed: boolean
        • language: any
        • strict: boolean
        • trailing: boolean
        • verbose: boolean

      Returns UrlStore

    Properties

    compressed: boolean
    done: boolean
    language: any
    strict: boolean
    trailingSlash: boolean
    urldict: Map<any, any>

    Methods

    • Parameters

      • data: any
      • visited: boolean = false

      Returns Map<any, any>

    • Parameters

      • domain: any

      Returns any

    • Parameters

      • urls: any
      • switch_: any = null

      Returns any[]

    • Returns void

    • Parameters

      • domain: any
      • toRight: any = null
      • timestamp: any = null
      • toLeft: any = null

      Returns void

    • Parameters

      • htmlstring: any
      • url: any
      • external: boolean = false
      • lang: any = null
      • withNav: boolean = true

      Returns void

    • Parameters

      • urls: any = null
      • appendleft: any = null
      • visited: boolean = false

      Returns void

    • Parameters

      • domains: any

      Returns void

    • Parameters

      • threshold: any

      Returns boolean

    • Returns any[]

    • Parameters

      • maxUrls: number = 100
      • timeLimit: number = 10

      Returns any[][]

    • Parameters

      • urls: any

      Returns any[]

    • Parameters

      • urls: any

      Returns any[]

    • Parameters

      • domain: any

      Returns any

    • Parameters

      • domain: any

      Returns any

    • Returns any[]

    • Parameters

      • website: any
      • defaultDelay: number = 5

      Returns any

    • Parameters

      • timeLimit: number = 10
      • maxUrls: number = 10000

      Returns any[]

    • Returns any[]

    • Parameters

      • website: any

      Returns any

    • Returns any[]

    • Parameters

      • domain: any
      • asVisited: boolean = true

      Returns any

    • Parameters

      • url: any

      Returns boolean

    • Parameters

      • domain: any

      Returns boolean

    • Parameters

      • url: any

      Returns any

    • Returns void

    • Returns void

    • Returns void

    • Parameters

      • website: any
      • rules: any

      Returns void

    • Returns any

    • Returns number

    diff --git a/docs/classes/src_extract_content_deduplication.LRUCache.html b/docs/classes/src_extract_content_deduplication.LRUCache.html deleted file mode 100644 index 1958545..0000000 --- a/docs/classes/src_extract_content_deduplication.LRUCache.html +++ /dev/null @@ -1,10 +0,0 @@ -LRUCache | ai-research-agent

    Constructors

    Properties

    Methods

    Constructors

    • Parameters

      • maxsize: number = 128

      Returns LRUCache

    Properties

    cache: Map<any, any>
    maxsize: number

    Methods

    • Returns void

    • Parameters

      • key: any

      Returns any

    • Parameters

      • key: any
      • value: any

      Returns void

    diff --git a/docs/classes/src_extract_content_deduplication.Simhash.html b/docs/classes/src_extract_content_deduplication.Simhash.html deleted file mode 100644 index a599edc..0000000 --- a/docs/classes/src_extract_content_deduplication.Simhash.html +++ /dev/null @@ -1,14 +0,0 @@ -Simhash | ai-research-agent

    Constructors

    • Parameters

      • inputString: string = ''
      • length: number = 64
      • existingHash: any = null

      Returns Simhash

    Properties

    hash: bigint
    length: number

    Methods

    • Parameters

      • inputString: any

      Returns bigint

    • Parameters

      • token: any

      Returns (-1 | 1)[]

    • Parameters

      • inputString: any

      Returns bigint

    • Parameters

      • otherHash: any

      Returns number

    • Parameters

      • otherHash: any

      Returns number

    • Returns string

    • Parameters

      • inputHash: any

      Returns bigint

    diff --git a/docs/classes/src_extract_content_downloads.Response.html b/docs/classes/src_extract_content_downloads.Response.html deleted file mode 100644 index 4fef032..0000000 --- a/docs/classes/src_extract_content_downloads.Response.html +++ /dev/null @@ -1,13 +0,0 @@ -Response | ai-research-agent

    Constructors

    Properties

    Methods

    Constructors

    • Parameters

      • data: any
      • status: any
      • url: any

      Returns Response

    Properties

    data: any
    headers: {
        [k: string]: T;
    }
    html: any
    status: any
    url: any

    Methods

    • Returns {
          data: any;
          headers: {
              [k: string]: T;
          };
          html: any;
          status: any;
          url: any;
      }

      • data: any
      • headers: {
            [k: string]: T;
        }
        • [k: string]: T
      • html: any
      • status: any
      • url: any
    • Parameters

      • decode: any

      Returns void

    • Parameters

      • headerDict: any

      Returns void

    diff --git a/docs/classes/src_extract_content_settings.Document.html b/docs/classes/src_extract_content_settings.Document.html deleted file mode 100644 index 53fc6e8..0000000 --- a/docs/classes/src_extract_content_settings.Document.html +++ /dev/null @@ -1,30 +0,0 @@ -Document | ai-research-agent

    Constructors

    • Returns Document

    Properties

    author: any
    body: any
    categories: any
    comments: any
    commentsbody: any
    date: any
    description: any
    filedate: any
    fingerprint: any
    hostname: any
    id: any
    image: any
    language: any
    license: any
    pagetype: any
    rawText: any
    sitename: any
    tags: any
    text: any
    title: any
    url: any

    Methods

    • Returns Document

    • Returns void

    • Parameters

      • attributes: any

      Returns void

    • Parameters

      • data: any

      Returns Document

    diff --git a/docs/classes/src_extract_content_settings.Extractor.html b/docs/classes/src_extract_content_settings.Extractor.html deleted file mode 100644 index ff452d2..0000000 --- a/docs/classes/src_extract_content_settings.Extractor.html +++ /dev/null @@ -1,27 +0,0 @@ -Extractor | ai-research-agent

    Constructors

    • Parameters

      • __namedParameters: {
            authorBlacklist: any;
            comments: boolean;
            config: {
                COOKIE: string;
                DOWNLOAD_TIMEOUT: string;
                EXTENSIVE_DATE_SEARCH: string;
                EXTERNAL_URLS: string;
                EXTRACTION_TIMEOUT: string;
                MAX_FILE_SIZE: string;
                MAX_REDIRECTS: string;
                MAX_REPETITIONS: string;
                MIN_DUPLCHECK_SIZE: string;
                MIN_EXTRACTED_COMM_SIZE: string;
                MIN_EXTRACTED_SIZE: string;
                MIN_FILE_SIZE: string;
                MIN_OUTPUT_COMM_SIZE: string;
                MIN_OUTPUT_SIZE: string;
                SLEEP_TIME: string;
                USER_AGENTS: string;
            };
            dateParams: any;
            dedup: boolean;
            fast: boolean;
            formatting: boolean;
            images: boolean;
            lang: any;
            links: boolean;
            maxTreeSize: any;
            onlyWithMetadata: boolean;
            outputFormat: string;
            precision: boolean;
            recall: boolean;
            source: any;
            tables: boolean;
            teiValidation: boolean;
            url: any;
            urlBlacklist: any;
            withMetadata: boolean;
        } = {}
        • authorBlacklist: any
        • comments: boolean
        • config: {
              COOKIE: string;
              DOWNLOAD_TIMEOUT: string;
              EXTENSIVE_DATE_SEARCH: string;
              EXTERNAL_URLS: string;
              EXTRACTION_TIMEOUT: string;
              MAX_FILE_SIZE: string;
              MAX_REDIRECTS: string;
              MAX_REPETITIONS: string;
              MIN_DUPLCHECK_SIZE: string;
              MIN_EXTRACTED_COMM_SIZE: string;
              MIN_EXTRACTED_SIZE: string;
              MIN_FILE_SIZE: string;
              MIN_OUTPUT_COMM_SIZE: string;
              MIN_OUTPUT_SIZE: string;
              SLEEP_TIME: string;
              USER_AGENTS: string;
          }
          • COOKIE: string
          • DOWNLOAD_TIMEOUT: string
          • EXTENSIVE_DATE_SEARCH: string
          • EXTERNAL_URLS: string
          • EXTRACTION_TIMEOUT: string
          • MAX_FILE_SIZE: string
          • MAX_REDIRECTS: string
          • MAX_REPETITIONS: string
          • MIN_DUPLCHECK_SIZE: string
          • MIN_EXTRACTED_COMM_SIZE: string
          • MIN_EXTRACTED_SIZE: string
          • MIN_FILE_SIZE: string
          • MIN_OUTPUT_COMM_SIZE: string
          • MIN_OUTPUT_SIZE: string
          • SLEEP_TIME: string
          • USER_AGENTS: string
        • dateParams: any
        • dedup: boolean
        • fast: boolean
        • formatting: boolean
        • images: boolean
        • lang: any
        • links: boolean
        • maxTreeSize: any
        • onlyWithMetadata: boolean
        • outputFormat: string
        • precision: boolean
        • recall: boolean
        • source: any
        • tables: boolean
        • teiValidation: boolean
        • url: any
        • urlBlacklist: any
        • withMetadata: boolean

      Returns Extractor

    Properties

    authorBlacklist: any
    comments: boolean
    config: any
    dateParams: any
    dedup: boolean
    fast: boolean
    focus: string
    format: any
    formatting: boolean
    images: boolean
    lang: any
    links: boolean
    maxTreeSize: any
    onlyWithMetadata: boolean
    source: any
    tables: boolean
    teiValidation: boolean
    url: any
    urlBlacklist: any
    withMetadata: any

    Methods

    • Parameters

      • config: any

      Returns void

    • Parameters

      • chosenFormat: any

      Returns void

    diff --git a/docs/classes/src_extract_content_spider.CrawlParameters.html b/docs/classes/src_extract_content_spider.CrawlParameters.html deleted file mode 100644 index 371f45e..0000000 --- a/docs/classes/src_extract_content_spider.CrawlParameters.html +++ /dev/null @@ -1,19 +0,0 @@ -CrawlParameters | ai-research-agent

    Constructors

    • Parameters

      • start: any
      • lang: any = null
      • rules: any = null
      • pruneXpath: any = null

      Returns CrawlParameters

    Properties

    base: string
    i: number
    isOn: boolean
    knownNum: number
    lang: any
    pruneXpath: any
    ref: any
    rules: any
    start: any

    Methods

    • Parameters

      • start: any

      Returns string

    • Parameters

      • start: any

      Returns any

    • Parameters

      • todo: any

      Returns any

    • Parameters

      • link: any

      Returns boolean

    • Parameters

      • urlStore: any

      Returns void

    diff --git a/docs/classes/src_trafilatura_extractor_core.Document.html b/docs/classes/src_trafilatura_extractor_core.Document.html new file mode 100644 index 0000000..6c7eb73 --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_core.Document.html @@ -0,0 +1,23 @@ +Document | ai-research-agent

    Constructors

    • Returns Document

    Properties

    author: string
    body: any
    categories: any[]
    comments: string
    commentsbody: any
    date: string
    description: string
    fingerprint: string
    hostname: string
    id: string
    license: string
    raw_text: string
    sitename: string
    tags: any[]
    text: string
    title: string
    url: string

    Methods

    • Returns Document

    diff --git a/docs/classes/src_trafilatura_extractor_core.Extractor.html b/docs/classes/src_trafilatura_extractor_core.Extractor.html new file mode 100644 index 0000000..2d2315a --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_core.Extractor.html @@ -0,0 +1,25 @@ +Extractor | ai-research-agent

    Constructors

    • Parameters

      • options: {} = {}

        Returns Extractor

      Properties

      authorBlacklist: any
      comments: any
      config: any
      dateParams: any
      dedup: any
      fast: any
      formatting: any
      images: any
      lang: any
      links: any
      maxTreeSize: any
      onlyWithMetadata: any
      outputFormat: any
      precision: any
      recall: any
      tables: any
      teiValidation: any
      url: any
      urlBlacklist: any
      withMetadata: any
      diff --git a/docs/classes/src_trafilatura_extractor_courlan_urlstore.UrlStore.html b/docs/classes/src_trafilatura_extractor_courlan_urlstore.UrlStore.html new file mode 100644 index 0000000..baf01d5 --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_courlan_urlstore.UrlStore.html @@ -0,0 +1,42 @@ +UrlStore | ai-research-agent

      Constructors

      • Parameters

        • __namedParameters: {
              compressed: boolean;
              language: any;
              strict: boolean;
              trailing: boolean;
              verbose: boolean;
          } = {}
          • compressed: boolean
          • language: any
          • strict: boolean
          • trailing: boolean
          • verbose: boolean

        Returns UrlStore

      Properties

      compressed: boolean
      done: boolean
      language: any
      strict: boolean
      trailingSlash: boolean
      urldict: Map<any, any>

      Methods

      • Parameters

        • data: any
        • visited: boolean = false

        Returns Map<any, any>

      • Parameters

        • domain: any

        Returns any

      • Parameters

        • urls: any
        • switch_: any = null

        Returns any[]

      • Returns void

      • Parameters

        • domain: any
        • toRight: any = null
        • timestamp: any = null
        • toLeft: any = null

        Returns void

      • Parameters

        • htmlstring: any
        • url: any
        • external: boolean = false
        • lang: any = null
        • withNav: boolean = true

        Returns void

      • Parameters

        • urls: any = null
        • appendleft: any = null
        • visited: boolean = false

        Returns void

      • Parameters

        • domains: any

        Returns void

      • Parameters

        • threshold: any

        Returns boolean

      • Returns any[]

      • Parameters

        • maxUrls: number = 100
        • timeLimit: number = 10

        Returns any[][]

      • Parameters

        • urls: any

        Returns any[]

      • Parameters

        • urls: any

        Returns any[]

      • Parameters

        • domain: any

        Returns any

      • Parameters

        • domain: any

        Returns any

      • Returns any[]

      • Parameters

        • website: any
        • defaultDelay: number = 5

        Returns any

      • Parameters

        • timeLimit: number = 10
        • maxUrls: number = 10000

        Returns any[]

      • Returns any[]

      • Parameters

        • website: any

        Returns any

      • Returns any[]

      • Parameters

        • domain: any
        • asVisited: boolean = true

        Returns any

      • Parameters

        • url: any

        Returns boolean

      • Parameters

        • domain: any

        Returns boolean

      • Parameters

        • url: any

        Returns any

      • Returns void

      • Returns void

      • Returns void

      • Parameters

        • website: any
        • rules: any

        Returns void

      • Returns any

      • Returns number

      diff --git a/docs/classes/src_trafilatura_extractor_deduplication.LRUCache.html b/docs/classes/src_trafilatura_extractor_deduplication.LRUCache.html new file mode 100644 index 0000000..6094868 --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_deduplication.LRUCache.html @@ -0,0 +1,10 @@ +LRUCache | ai-research-agent

      Constructors

      Properties

      Methods

      Constructors

      • Parameters

        • maxsize: number = 128

        Returns LRUCache

      Properties

      cache: Map<any, any>
      maxsize: number

      Methods

      • Returns void

      • Parameters

        • key: any

        Returns any

      • Parameters

        • key: any
        • value: any

        Returns void

      diff --git a/docs/classes/src_trafilatura_extractor_deduplication.Simhash.html b/docs/classes/src_trafilatura_extractor_deduplication.Simhash.html new file mode 100644 index 0000000..884841c --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_deduplication.Simhash.html @@ -0,0 +1,14 @@ +Simhash | ai-research-agent

      Constructors

      • Parameters

        • inputString: string = ''
        • length: number = 64
        • existingHash: any = null

        Returns Simhash

      Properties

      hash: bigint
      length: number

      Methods

      • Parameters

        • inputString: any

        Returns bigint

      • Parameters

        • token: any

        Returns (-1 | 1)[]

      • Parameters

        • inputString: any

        Returns bigint

      • Parameters

        • otherHash: any

        Returns number

      • Parameters

        • otherHash: any

        Returns number

      • Returns string

      • Parameters

        • inputHash: any

        Returns bigint

      diff --git a/docs/classes/src_trafilatura_extractor_downloads.Response.html b/docs/classes/src_trafilatura_extractor_downloads.Response.html new file mode 100644 index 0000000..6cd45e0 --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_downloads.Response.html @@ -0,0 +1,13 @@ +Response | ai-research-agent

      Constructors

      Properties

      Methods

      Constructors

      • Parameters

        • data: any
        • status: any
        • url: any

        Returns Response

      Properties

      data: any
      headers: {
          [k: string]: T;
      }
      html: any
      status: any
      url: any

      Methods

      • Returns {
            data: any;
            headers: {
                [k: string]: T;
            };
            html: any;
            status: any;
            url: any;
        }

        • data: any
        • headers: {
              [k: string]: T;
          }
          • [k: string]: T
        • html: any
        • status: any
        • url: any
      • Parameters

        • decode: any

        Returns void

      • Parameters

        • headerDict: any

        Returns void

      diff --git a/docs/classes/src_extractor_html_to_content_readability.Readability.html b/docs/classes/src_trafilatura_extractor_readability.Readability.html similarity index 55% rename from docs/classes/src_extractor_html_to_content_readability.Readability.html rename to docs/classes/src_trafilatura_extractor_readability.Readability.html index 96026a6..d613161 100644 --- a/docs/classes/src_extractor_html_to_content_readability.Readability.html +++ b/docs/classes/src_trafilatura_extractor_readability.Readability.html @@ -1,221 +1,258 @@ -Readability | ai-research-agent

      Constructors

      Properties

      ALTER_TO_DIV_EXCEPTIONS -CLASSES_TO_PRESERVE -DEFAULT_CHAR_THRESHOLD -DEFAULT_MAX_ELEMS_TO_PARSE -DEFAULT_N_TOP_CANDIDATES -DEFAULT_TAGS_TO_SCORE -DEPRECATED_SIZE_ATTRIBUTE_ELEMS -DIV_TO_P_ELEMS -ELEMENT_NODE -FLAG_CLEAN_CONDITIONALLY -FLAG_STRIP_UNLIKELYS -FLAG_WEIGHT_CLASSES -HTML_ESCAPE_MAP -PHRASING_ELEMS -PRESENTATIONAL_ATTRIBUTES -REGEXPS -TEXT_NODE -UNLIKELY_ROLES -_articleByline -_articleDir -_articleSiteName -_articleTitle -_attempts -_charThreshold -_checkByline -_classesToPreserve -_clean -_cleanClasses -_cleanConditionally -_cleanHeaders -_cleanMatchedNodes -_cleanStyles -_concatNodeLists -_debug -_disableJSONLD -_doc -_docJSDOMParser -_everyNode -_findNode -_fixLazyImages -_fixRelativeUris -_flagIsActive -_flags -_forEachNode -_getAllNodesWithTag -_getArticleMetadata -_getArticleTitle -_getCharCount -_getClassWeight -_getInnerText -_getJSONLD -_getLinkDensity -_getNextNode -_getNodeAncestors -_getRowAndColumnCount -_getTextDensity -_grabArticle -_hasAncestorTag -_hasChildBlockElement -_hasSingleTagInsideElement -_headerDuplicatesTitle -_initializeNode -_isElementWithoutContent -_isPhrasingContent -_isProbablyVisible -_isSingleImage -_isValidByline -_isWhitespace -_keepClasses -_markDataTables -_maxElemsToParse -_nbTopCandidates -_nextNode -_postProcessContent -_prepArticle -_prepDocument -_removeAndGetNext -_removeFlag -_removeNodes -_removeScripts -_replaceBrs -_replaceNodeTags -_serializer -_setNodeTag -_simplifyNestedElements -_someNode -_textSimilarity -_unescapeHtmlEntities -_unwrapNoscriptImages -log -parse -prototype -

      Constructors

      • Parameters

        • doc: HTMLDocument
        • options: any
        • Rest...args: any

        Returns Readability

      Properties

      ALTER_TO_DIV_EXCEPTIONS: string[] = ...
      CLASSES_TO_PRESERVE: string[] = ...
      DEFAULT_CHAR_THRESHOLD: number = 500
      DEFAULT_MAX_ELEMS_TO_PARSE: number = 0
      DEFAULT_N_TOP_CANDIDATES: number = 5
      DEFAULT_TAGS_TO_SCORE: string[] = ...
      DEPRECATED_SIZE_ATTRIBUTE_ELEMS: string[] = ...
      DIV_TO_P_ELEMS: Set<string> = ...
      ELEMENT_NODE: number = 1
      FLAG_CLEAN_CONDITIONALLY: number = 0x4
      FLAG_STRIP_UNLIKELYS: number = 0x1
      FLAG_WEIGHT_CLASSES: number = 0x2
      HTML_ESCAPE_MAP: {
          amp: string;
          apos: string;
          gt: string;
          lt: string;
          quot: string;
      } = ...
      PHRASING_ELEMS: string[] = ...
      PRESENTATIONAL_ATTRIBUTES: string[] = ...
      REGEXPS: {
          b64DataUrl: RegExp;
          byline: RegExp;
          extraneous: RegExp;
          hasContent: RegExp;
          hashUrl: RegExp;
          jsonLdArticleTypes: RegExp;
          negative: RegExp;
          nextLink: RegExp;
          normalize: RegExp;
          okMaybeItsACandidate: RegExp;
          positive: RegExp;
          prevLink: RegExp;
          replaceFonts: RegExp;
          shareElements: RegExp;
          srcsetUrl: RegExp;
          tokenize: RegExp;
          unlikelyCandidates: RegExp;
          videos: RegExp;
          whitespace: RegExp;
      } = ...
      TEXT_NODE: number = 3
      UNLIKELY_ROLES: string[] = ...
      _articleByline: any
      _articleDir: any
      _articleSiteName: any
      _articleTitle: any
      _attempts: any[]
      _charThreshold: any
      _checkByline: typeof __function = ...
      _classesToPreserve: string[]
      _clean: ((e: any, tag: any) => void) = ...

      Clean a node of all elements of type "tag". +Readability | ai-research-agent

      Mozilla Readability (2015)

      +
        +
      1. Define regex patterns for content identification
      2. +
      3. Clean HTML by removing unlikely content
      4. +
      5. Score nodes based on content quality indicators
      6. +
      7. Select the best candidate for main content
      8. +
      9. Extract top candidate
      10. +
      11. Clean the selected content
      12. +
      +

      The HTML string to extract content from

      +

      Minimum length of content to be considered valid

      +

      Minimum score for content to be considered valid

      +

      Minimum length of text to be considered valid

      +

      Length to retry content extraction if initial attempt fails

      +

      Extracted HTML element of main content such as article body

      +

      Based on

      +
      var url = "https://en.wikipedia.org/wiki/David_Hilbert";
      var html = await (await fetch(url)).text();
      var content = extractContentHTML(html); +
      + +

      Constructors

      Properties

      ALTER_TO_DIV_EXCEPTIONS +CLASSES_TO_PRESERVE +DEFAULT_CHAR_THRESHOLD +DEFAULT_MAX_ELEMS_TO_PARSE +DEFAULT_N_TOP_CANDIDATES +DEFAULT_TAGS_TO_SCORE +DEPRECATED_SIZE_ATTRIBUTE_ELEMS +DIV_TO_P_ELEMS +ELEMENT_NODE +FLAG_CLEAN_CONDITIONALLY +FLAG_STRIP_UNLIKELYS +FLAG_WEIGHT_CLASSES +HTML_ESCAPE_MAP +PHRASING_ELEMS +PRESENTATIONAL_ATTRIBUTES +REGEXPS +TEXT_NODE +UNLIKELY_ROLES +_articleByline +_articleDir +_articleSiteName +_articleTitle +_attempts +_charThreshold +_checkByline +_classesToPreserve +_clean +_cleanClasses +_cleanConditionally +_cleanHeaders +_cleanMatchedNodes +_cleanStyles +_concatNodeLists +_debug +_disableJSONLD +_doc +_docJSDOMParser +_everyNode +_findNode +_fixLazyImages +_fixRelativeUris +_flagIsActive +_flags +_forEachNode +_getAllNodesWithTag +_getArticleMetadata +_getArticleTitle +_getCharCount +_getClassWeight +_getInnerText +_getJSONLD +_getLinkDensity +_getNextNode +_getNodeAncestors +_getRowAndColumnCount +_getTextDensity +_grabArticle +_hasAncestorTag +_hasChildBlockElement +_hasSingleTagInsideElement +_headerDuplicatesTitle +_initializeNode +_isElementWithoutContent +_isPhrasingContent +_isProbablyVisible +_isSingleImage +_isValidByline +_isWhitespace +_keepClasses +_markDataTables +_maxElemsToParse +_nbTopCandidates +_nextNode +_postProcessContent +_prepArticle +_prepDocument +_removeAndGetNext +_removeFlag +_removeNodes +_removeScripts +_replaceBrs +_replaceNodeTags +_serializer +_setNodeTag +_simplifyNestedElements +_someNode +_textSimilarity +_unescapeHtmlEntities +_unwrapNoscriptImages +log +parse +prototype +

      Constructors

      • Mozilla Readability (2015)

        +
          +
        1. Define regex patterns for content identification
        2. +
        3. Clean HTML by removing unlikely content
        4. +
        5. Score nodes based on content quality indicators
        6. +
        7. Select the best candidate for main content
        8. +
        9. Extract top candidate
        10. +
        11. Clean the selected content
        12. +
        +

        Parameters

        • doc: any
        • Optionaloptions: {
              minContentLength: number;
              minScore: number;
              minTextLength: number;
              retryLength: number;
          }
          • minContentLength: number

            Minimum length of content to be considered valid

            +
          • minScore: number

            Minimum score for content to be considered valid

            +
          • minTextLength: number

            Minimum length of text to be considered valid

            +
          • retryLength: number

            Length to retry content extraction if initial attempt fails

            +
        • Rest...args: any

        Returns Readability

        Extracted HTML element of main content such as article body

        +

        Based on

        +
        var url = "https://en.wikipedia.org/wiki/David_Hilbert";
        var html = await (await fetch(url)).text();
        var content = extractContentHTML(html); +
        + +

      Properties

      ALTER_TO_DIV_EXCEPTIONS: string[] = ...
      CLASSES_TO_PRESERVE: string[] = ...
      DEFAULT_CHAR_THRESHOLD: number = 500
      DEFAULT_MAX_ELEMS_TO_PARSE: number = 0
      DEFAULT_N_TOP_CANDIDATES: number = 5
      DEFAULT_TAGS_TO_SCORE: string[] = ...
      DEPRECATED_SIZE_ATTRIBUTE_ELEMS: string[] = ...
      DIV_TO_P_ELEMS: Set<string> = ...
      ELEMENT_NODE: number = 1
      FLAG_CLEAN_CONDITIONALLY: number = 0x4
      FLAG_STRIP_UNLIKELYS: number = 0x1
      FLAG_WEIGHT_CLASSES: number = 0x2
      HTML_ESCAPE_MAP: {
          amp: string;
          apos: string;
          gt: string;
          lt: string;
          quot: string;
      } = ...
      PHRASING_ELEMS: string[] = ...
      PRESENTATIONAL_ATTRIBUTES: string[] = ...
      REGEXPS: {
          b64DataUrl: RegExp;
          byline: RegExp;
          extraneous: RegExp;
          hasContent: RegExp;
          hashUrl: RegExp;
          jsonLdArticleTypes: RegExp;
          negative: RegExp;
          nextLink: RegExp;
          normalize: RegExp;
          okMaybeItsACandidate: RegExp;
          positive: RegExp;
          prevLink: RegExp;
          replaceFonts: RegExp;
          shareElements: RegExp;
          srcsetUrl: RegExp;
          tokenize: RegExp;
          unlikelyCandidates: RegExp;
          videos: RegExp;
          whitespace: RegExp;
      } = ...
      TEXT_NODE: number = 3
      UNLIKELY_ROLES: string[] = ...
      _articleByline: any
      _articleDir: any
      _articleSiteName: any
      _articleTitle: any
      _attempts: any[]
      _charThreshold: any
      _checkByline: typeof __function = ...
      _classesToPreserve: string[]
      _clean: ((e: any, tag: any) => void) = ...

      Clean a node of all elements of type "tag". (Unless it's a youtube/vimeo video. People love movies.)

      Type declaration

        • (e, tag): void
        • Parameters

          • e: any
          • tag: any

          Returns void

          void

          -
      _cleanClasses: ((node: any) => void) = ...

      Removes the class="" attribute from every element in the given +

      _cleanClasses: ((node: any) => void) = ...

      Removes the class="" attribute from every element in the given subtree, except those that match CLASSES_TO_PRESERVE and the classesToPreserve array from the options object.

      Type declaration

        • (node): void
        • Parameters

          • node: any

          Returns void

          void

          -
      _cleanConditionally: ((e: any, tag: any) => void) = ...

      Clean an element of all tags of type "tag" if they look fishy. +

      _cleanConditionally: ((e: any, tag: any) => void) = ...

      Clean an element of all tags of type "tag" if they look fishy. "Fishy" is an algorithm based on content length, classnames, link density, number of images & embeds, etc.

      Type declaration

        • (e, tag): void
        • Parameters

          • e: any
          • tag: any

          Returns void

          void

          -
      _cleanHeaders: ((e: any) => void) = ...

      Clean out spurious headers from an Element.

      +
      _cleanHeaders: ((e: any) => void) = ...

      Clean out spurious headers from an Element.

      Type declaration

        • (e): void
        • Parameters

          • e: any

          Returns void

          void

          -
      _cleanMatchedNodes: ((e: any, filter: any) => void) = ...

      Clean out elements that match the specified conditions

      +
      _cleanMatchedNodes: ((e: any, filter: any) => void) = ...

      Clean out elements that match the specified conditions

      Type declaration

        • (e, filter): void
        • Parameters

          • e: any
          • filter: any

          Returns void

          void

          -
      _cleanStyles: ((e: any) => void) = ...

      Remove the style attribute on every e and under. +

      _cleanStyles: ((e: any) => void) = ...

      Remove the style attribute on every e and under. TODO: Test if getElementsByTagName(*) is faster.

      Type declaration

        • (e): void
        • Parameters

          • e: any

          Returns void

          void

          -
      _concatNodeLists: ((...args: any[]) => any) = ...

      Concat all nodelists passed as arguments.

      -

      Type declaration

        • (...args): any
        • Parameters

          • Rest...args: any[]

          Returns any

          ...NodeList

          -
      _debug: boolean
      _disableJSONLD: boolean
      _doc: HTMLDocument
      _docJSDOMParser: any
      _everyNode: ((nodeList: any, fn: any) => any) = ...

      Iterate over a NodeList, return true if all of the provided iterate +

      _concatNodeLists: ((...args: any) => any) = ...

      Concat all nodelists passed as arguments.

      +

      Type declaration

        • (...args): any
        • Parameters

          • Rest...args: any

          Returns any

          ...NodeList

          +
      _debug: boolean
      _disableJSONLD: boolean
      _doc: any
      _docJSDOMParser: any
      _everyNode: ((nodeList: any, fn: any) => any) = ...

      Iterate over a NodeList, return true if all of the provided iterate function calls return true, false otherwise.

      For convenience, the current object context is applied to the provided iterate function.

      Type declaration

        • (nodeList, fn): any
        • Parameters

          • nodeList: any
          • fn: any

          Returns any

          Boolean

          -
      _findNode: ((nodeList: any, fn: any) => any) = ...

      Iterate over a NodeList, and return the first node that passes +

      _findNode: ((nodeList: any, fn: any) => any) = ...

      Iterate over a NodeList, and return the first node that passes the supplied test function

      For convenience, the current object context is applied to the provided test function.

      Type declaration

        • (nodeList, fn): any
        • Parameters

          • nodeList: any
          • fn: any

          Returns any

          void

          -
      _fixLazyImages: ((root: any) => void) = ...
      _fixRelativeUris: ((articleContent: any) => void) = ...
      _fixLazyImages: ((root: any) => void) = ...
      _fixRelativeUris: ((articleContent: any) => void) = ...
      _flagIsActive: ((flag: any) => boolean) = ...
      _flags: number
      _forEachNode: ((nodeList: any, fn: any) => void) = ...

      Iterate over a NodeList, which doesn't natively fully implement the Array +

      _flagIsActive: ((flag: any) => boolean) = ...
      _flags: number
      _forEachNode: ((nodeList: any, fn: any) => void) = ...

      Iterate over a NodeList, which doesn't natively fully implement the Array interface.

      For convenience, the current object context is applied to the provided iterate function.

      Type declaration

        • (nodeList, fn): void
        • Parameters

          • nodeList: any
          • fn: any

          Returns void

          void

          -
      _getAllNodesWithTag: ((node: any, tagNames: any) => any) = ...
      _getArticleMetadata: ((jsonld: any) => {
          byline: any;
          excerpt: any;
          siteName: any;
          title: any;
      }) = ...

      Attempts to get excerpt and byline metadata for the article.

      +
      _getAllNodesWithTag: ((node: any, tagNames: any) => any) = ...
      _getArticleMetadata: ((jsonld: any) => {
          byline: any;
          excerpt: any;
          siteName: any;
          title: any;
      }) = ...

      Attempts to get excerpt and byline metadata for the article.

      Type declaration

        • (jsonld): {
              byline: any;
              excerpt: any;
              siteName: any;
              title: any;
          }
        • Parameters

          • jsonld: any

            — object containing any metadata that could be extracted from JSON-LD object.

          Returns {
              byline: any;
              excerpt: any;
              siteName: any;
              title: any;
          }

          Object with optional "excerpt" and "byline" properties

          -
          • byline: any
          • excerpt: any
          • siteName: any
          • title: any
      _getArticleTitle: (() => string) = ...

      Get the article title as an H1.

      +
      • byline: any
      • excerpt: any
      • siteName: any
      • title: any
      _getArticleTitle: (() => string) = ...

      Get the article title as an H1.

      Type declaration

        • (): string
        • Returns string

          string

          -
      _getCharCount: ((e: any, s: any) => number) = ...

      Get the number of times a string s appears in the node e.

      +
      _getCharCount: ((e: any, s: any) => number) = ...

      Get the number of times a string s appears in the node e.

      Type declaration

        • (e, s): number
        • Parameters

          • e: any
          • s: any

          Returns number

          number (integer)

          -
      _getClassWeight: ((e: any) => number) = ...

      Get an elements class/id weight. Uses regular expressions to tell if this +

      _getClassWeight: ((e: any) => number) = ...

      Get an elements class/id weight. Uses regular expressions to tell if this element looks good or bad.

      Type declaration

        • (e): number
        • Parameters

          • e: any

          Returns number

          number (Integer)

          -
      _getInnerText: ((e: any, normalizeSpaces: any) => any) = ...

      Get the inner text of a node - cross browser compatibly. +

      _getInnerText: ((e: any, normalizeSpaces: any) => any) = ...

      Get the inner text of a node - cross browser compatibly. This also strips out any excess whitespace to be found.

      Type declaration

        • (e, normalizeSpaces): any
        • Parameters

          • e: any
          • normalizeSpaces: any

          Returns any

          string

          -
      _getJSONLD: ((doc: any) => {}) = ...

      Try to extract metadata from JSON-LD object. +

      _getJSONLD: ((doc: any) => {}) = ...

      Try to extract metadata from JSON-LD object. For now, only Schema.org objects of type Article or its subtypes are supported.

      Type declaration

        • (doc): {}
        • Parameters

          • doc: any

          Returns {}

          Object with any metadata that could be extracted (possibly none)

          -
        _getLinkDensity: ((element: any) => number) = ...

        Get the density of links as a percentage of the content +

          _getLinkDensity: ((element: any) => number) = ...

          Get the density of links as a percentage of the content This is the amount of text that is inside a link divided by the total text in the node.

          Type declaration

            • (element): number
            • Parameters

              • element: any

              Returns number

              number (float)

              -
          _getNextNode: ((node: any, ignoreSelfAndKids: any) => any) = ...

          Traverse the DOM from node to node, starting at the node passed in. +

          _getNextNode: ((node: any, ignoreSelfAndKids: any) => any) = ...

          Traverse the DOM from node to node, starting at the node passed in. Pass true for the second parameter to indicate this node itself (and its kids) are going away, and we want the next node over.

          Calling this in a loop will traverse the DOM depth-first.

          -
          _getNodeAncestors: ((node: any, maxDepth: any) => any[]) = ...
          _getRowAndColumnCount: ((table: any) => {
              columns: number;
              rows: number;
          }) = ...

          Return an object indicating how many rows and columns this table has.

          -
          _getTextDensity: ((e: any, tags: any) => number) = ...
          _grabArticle: typeof __function = ...

          grabArticle - Using a variety of metrics (content score, classname, element types), find the content that is +

          _getNodeAncestors: ((node: any, maxDepth: any) => any[]) = ...
          _getRowAndColumnCount: ((table: any) => {
              columns: number;
              rows: number;
          }) = ...

          Return an object indicating how many rows and columns this table has.

          +
          _getTextDensity: ((e: any, tags: any) => number) = ...
          _grabArticle: typeof __function = ...

          grabArticle - Using a variety of metrics (content score, classname, element types), find the content that is most likely to be the stuff a user wants to read. Then return it wrapped up in a div.

          a document to run upon. Needs to be a full document, complete with body.

          -

          Element

          -
          _hasAncestorTag: ((node: any, tagName: any, maxDepth: any, filterFn: any) => boolean) = ...

          Check if a given node has one of its ancestor tag name matching the +

          Element

          +
          _hasAncestorTag: ((node: any, tagName: any, maxDepth: any, filterFn: any) => boolean) = ...

          Check if a given node has one of its ancestor tag name matching the provided one.

          Type declaration

            • (node, tagName, maxDepth, filterFn): boolean
            • Parameters

              • node: any
              • tagName: any
              • maxDepth: any
              • filterFn: any

              Returns boolean

              Boolean

              -
          _hasChildBlockElement: ((element: any) => any) = ...

          Determine whether element has any children block level elements.

          -
          _hasSingleTagInsideElement: ((element: any, tag: any) => boolean) = ...

          Check if this node has only whitespace and a single element with given tag +

          _hasChildBlockElement: ((element: any) => any) = ...

          Determine whether element has any children block level elements.

          +
          _hasSingleTagInsideElement: ((element: any, tag: any) => boolean) = ...

          Check if this node has only whitespace and a single element with given tag Returns false if the DIV node contains non-empty text nodes or if it contains no element with given tag or more than 1 element.

          -
          _headerDuplicatesTitle: ((node: any) => boolean) = ...

          Check if this node is an H1 or H2 element whose content is mostly +

          _headerDuplicatesTitle: ((node: any) => boolean) = ...

          Check if this node is an H1 or H2 element whose content is mostly the same as the article title.

          Type declaration

            • (node): boolean
            • Parameters

              • node: any

              Returns boolean

              boolean indicating whether this is a title-like header.

              -
          _initializeNode: ((node: any) => void) = ...

          Initialize a node with the readability object. Also checks the +

          _initializeNode: ((node: any) => void) = ...

          Initialize a node with the readability object. Also checks the className/id for special names to add to its score.

          Type declaration

            • (node): void
            • Parameters

              • node: any

              Returns void

              void

              -
          _isElementWithoutContent: ((node: any) => boolean) = ...
          _isPhrasingContent: ((node: any) => any) = ...

          Determine if a node qualifies as phrasing content. +

          _isElementWithoutContent: ((node: any) => boolean) = ...
          _isPhrasingContent: ((node: any) => any) = ...
          _isProbablyVisible: ((node: any) => boolean) = ...
          _isSingleImage: ((node: any) => any) = ...

          Check if node is image, or if node contains exactly only one image +

          _isProbablyVisible: ((node: any) => boolean) = ...
          _isSingleImage: ((node: any) => any) = ...

          Check if node is image, or if node contains exactly only one image whether as a direct child or as its descendants.

          -
          _isValidByline: ((byline: any) => boolean) = ...

          Check whether the input string could be a byline. +

          _isValidByline: ((byline: any) => boolean) = ...

          Check whether the input string could be a byline. This verifies that the input is a string, and that the length is less than 100 chars.

          Type declaration

            • (byline): boolean
            • Parameters

              • byline: any

              Returns boolean

              Boolean - whether the input string is a byline.

              -
          _isWhitespace: ((node: any) => boolean) = ...
          _keepClasses: boolean
          _markDataTables: ((root: any) => void) = ...

          Look for 'data' (as opposed to 'layout') tables, for which we use +

          _isWhitespace: ((node: any) => boolean) = ...
          _keepClasses: boolean
          _markDataTables: ((root: any) => void) = ...

          Look for 'data' (as opposed to 'layout') tables, for which we use similar checks as https://searchfox.org/mozilla-central/rev/f82d5c549f046cb64ce5602bfd894b7ae807c8f8/accessible/generic/TableAccessible.cpp#19

          -
          _maxElemsToParse: any
          _nbTopCandidates: any
          _nextNode: ((node: any) => any) = ...

          Finds the next node, starting from the given node, and ignoring +

          _maxElemsToParse: any
          _nbTopCandidates: any
          _nextNode: ((node: any) => any) = ...

          Finds the next node, starting from the given node, and ignoring whitespace in between. If the given node is an element, the same node is returned.

          -
          _postProcessContent: ((articleContent: any) => void) = ...

          Run any post-process modifications to article content as necessary.

          +
          _postProcessContent: ((articleContent: any) => void) = ...

          Run any post-process modifications to article content as necessary.

          Type declaration

            • (articleContent): void
            • Parameters

              • articleContent: any

              Returns void

              void

              -
          _prepArticle: ((articleContent: any) => void) = ...

          Prepare the article node for display. Clean out any inline styles, +

          _prepArticle: ((articleContent: any) => void) = ...

          Prepare the article node for display. Clean out any inline styles, iframes, forms, strip extraneous

          tags, etc.

          Type declaration

            • (articleContent): void
            • Parameters

              • articleContent: any

              Returns void

              void

              -
          _prepDocument: (() => void) = ...

          Prepare the HTML document for readability to scrape it. +

          _prepDocument: (() => void) = ...

          Prepare the HTML document for readability to scrape it. This includes things like stripping javascript, CSS, and handling terrible markup.

          Type declaration

            • (): void
            • Returns void

              void

              -
          _removeAndGetNext: ((node: any) => any) = ...
          _removeFlag: typeof __function = ...
          _removeNodes: ((nodeList: any, filterFn: any) => void) = ...

          Iterates over a NodeList, calls filterFn for each node and removes node +

          _removeAndGetNext: ((node: any) => any) = ...
          _removeFlag: typeof __function = ...
          _removeNodes: ((nodeList: any, filterFn: any) => void) = ...

          Iterates over a NodeList, calls filterFn for each node and removes node if function returned true.

          If function is not passed, removes all the nodes in node list.

          Type declaration

            • (nodeList, filterFn): void
            • Parameters

              • nodeList: any
              • filterFn: any

              Returns void

              void

              -
          _removeScripts: ((doc: any) => void) = ...

          Removes script tags from the document.

          -
          _replaceBrs: ((elem: any) => void) = ...

          Replaces 2 or more successive
          elements with a single

          . +

          _removeScripts: ((doc: any) => void) = ...

          Removes script tags from the document.

          +
          _replaceBrs: ((elem: any) => void) = ...

          Replaces 2 or more successive
          elements with a single

          . Whitespace between
          elements are ignored. For example:

          foo
          bar


          abc
          will become: -
          foo
          bar

          abc

          _replaceNodeTags: ((nodeList: any, newTagName: any) => void) = ...

          Iterates over a NodeList, and calls _setNodeTag for each node.

          +
          foo
          bar

          abc

          _replaceNodeTags: ((nodeList: any, newTagName: any) => void) = ...

          Iterates over a NodeList, and calls _setNodeTag for each node.

          Type declaration

            • (nodeList, newTagName): void
            • Parameters

              • nodeList: any
              • newTagName: any

              Returns void

              void

              -
          _serializer: any
          _setNodeTag: ((node: any, tag: any) => any) = ...
          _simplifyNestedElements: ((articleContent: any) => void) = ...
          _someNode: ((nodeList: any, fn: any) => any) = ...

          Iterate over a NodeList, return true if any of the provided iterate +

          _serializer: any
          _setNodeTag: ((node: any, tag: any) => any) = ...
          _simplifyNestedElements: ((articleContent: any) => void) = ...
          _someNode: ((nodeList: any, fn: any) => any) = ...

          Iterate over a NodeList, return true if any of the provided iterate function calls returns true, false otherwise.

          For convenience, the current object context is applied to the provided iterate function.

          Type declaration

            • (nodeList, fn): any
            • Parameters

              • nodeList: any
              • fn: any

              Returns any

              Boolean

              -
          _textSimilarity: ((textA: any, textB: any) => number) = ...
          _unescapeHtmlEntities: ((str: string) => string) = ...

          Converts some of the common HTML entities in string to their corresponding characters.

          +
          _textSimilarity: ((textA: any, textB: any) => number) = ...
          _unescapeHtmlEntities: ((str: string) => string) = ...

          Converts some of the common HTML entities in string to their corresponding characters.

          Type declaration

            • (str): string
            • Parameters

              • str: string

                {string} - a string to unescape.

              Returns string

              string without HTML entity.

              -
          _unwrapNoscriptImages: ((doc: any) => void) = ...

          Find all

          _unwrapNoscriptImages: ((doc: any) => void) = ...

          Find all

          -
          log: ((...args: any[]) => void)
          parse: typeof __function = ...

          Runs readability.

          +
          log: ((...args: any) => void)
          parse: typeof __function = ...

          Runs readability.

          Workflow:

          1. Prep the document by removing script tags, css, etc.
          2. @@ -224,8 +261,8 @@
          -

          void

          -
          prototype: {
              ALTER_TO_DIV_EXCEPTIONS: string[];
              CLASSES_TO_PRESERVE: string[];
              DEFAULT_CHAR_THRESHOLD: number;
              DEFAULT_MAX_ELEMS_TO_PARSE: number;
              DEFAULT_N_TOP_CANDIDATES: number;
              DEFAULT_TAGS_TO_SCORE: string[];
              DEPRECATED_SIZE_ATTRIBUTE_ELEMS: string[];
              DIV_TO_P_ELEMS: Set<string>;
              ELEMENT_NODE: number;
              FLAG_CLEAN_CONDITIONALLY: number;
              FLAG_STRIP_UNLIKELYS: number;
              FLAG_WEIGHT_CLASSES: number;
              HTML_ESCAPE_MAP: {
                  amp: string;
                  apos: string;
                  gt: string;
                  lt: string;
                  quot: string;
              };
              PHRASING_ELEMS: string[];
              PRESENTATIONAL_ATTRIBUTES: string[];
              REGEXPS: {
                  b64DataUrl: RegExp;
                  byline: RegExp;
                  extraneous: RegExp;
                  hasContent: RegExp;
                  hashUrl: RegExp;
                  jsonLdArticleTypes: RegExp;
                  negative: RegExp;
                  nextLink: RegExp;
                  normalize: RegExp;
                  okMaybeItsACandidate: RegExp;
                  positive: RegExp;
                  prevLink: RegExp;
                  replaceFonts: RegExp;
                  shareElements: RegExp;
                  srcsetUrl: RegExp;
                  tokenize: RegExp;
                  unlikelyCandidates: RegExp;
                  videos: RegExp;
                  whitespace: RegExp;
              };
              TEXT_NODE: number;
              UNLIKELY_ROLES: string[];
              _checkByline: typeof __function;
              _clean: ((e: any, tag: any) => void);
              _cleanClasses: ((node: any) => void);
              _cleanConditionally: ((e: any, tag: any) => void);
              _cleanHeaders: ((e: any) => void);
              _cleanMatchedNodes: ((e: any, filter: any) => void);
              _cleanStyles: ((e: any) => void);
              _concatNodeLists: ((...args: any[]) => any);
              _everyNode: ((nodeList: any, fn: any) => any);
              _findNode: ((nodeList: any, fn: any) => any);
              _fixLazyImages: ((root: any) => void);
              _fixRelativeUris: ((articleContent: any) => void);
              _flagIsActive: ((flag: any) => boolean);
              _forEachNode: ((nodeList: any, fn: any) => void);
              _getAllNodesWithTag: ((node: any, tagNames: any) => any);
              _getArticleMetadata: ((jsonld: any) => {
                  byline: any;
                  excerpt: any;
                  siteName: any;
                  title: any;
              });
              _getArticleTitle: (() => string);
              _getCharCount: ((e: any, s: any) => number);
              _getClassWeight: ((e: any) => number);
              _getInnerText: ((e: any, normalizeSpaces: any) => any);
              _getJSONLD: ((doc: any) => {});
              _getLinkDensity: ((element: any) => number);
              _getNextNode: ((node: any, ignoreSelfAndKids: any) => any);
              _getNodeAncestors: ((node: any, maxDepth: any) => any[]);
              _getRowAndColumnCount: ((table: any) => {
                  columns: number;
                  rows: number;
              });
              _getTextDensity: ((e: any, tags: any) => number);
              _grabArticle: typeof __function;
              _hasAncestorTag: ((node: any, tagName: any, maxDepth: any, filterFn: any) => boolean);
              _hasChildBlockElement: ((element: any) => any);
              _hasSingleTagInsideElement: ((element: any, tag: any) => boolean);
              _headerDuplicatesTitle: ((node: any) => boolean);
              _initializeNode: ((node: any) => void);
              _isElementWithoutContent: ((node: any) => boolean);
              _isPhrasingContent: ((node: any) => any);
              _isProbablyVisible: ((node: any) => boolean);
              _isSingleImage: ((node: any) => any);
              _isValidByline: ((byline: any) => boolean);
              _isWhitespace: ((node: any) => boolean);
              _markDataTables: ((root: any) => void);
              _nextNode: ((node: any) => any);
              _postProcessContent: ((articleContent: any) => void);
              _prepArticle: ((articleContent: any) => void);
              _prepDocument: (() => void);
              _removeAndGetNext: ((node: any) => any);
              _removeFlag: typeof __function;
              _removeNodes: ((nodeList: any, filterFn: any) => void);
              _removeScripts: ((doc: any) => void);
              _replaceBrs: ((elem: any) => void);
              _replaceNodeTags: ((nodeList: any, newTagName: any) => void);
              _setNodeTag: ((node: any, tag: any) => any);
              _simplifyNestedElements: ((articleContent: any) => void);
              _someNode: ((nodeList: any, fn: any) => any);
              _textSimilarity: ((textA: any, textB: any) => number);
              _unescapeHtmlEntities: ((str: string) => string);
              _unwrapNoscriptImages: ((doc: any) => void);
              parse: typeof __function;
          }

          Type declaration

          • ALTER_TO_DIV_EXCEPTIONS: string[]
          • CLASSES_TO_PRESERVE: string[]
          • DEFAULT_CHAR_THRESHOLD: number
          • DEFAULT_MAX_ELEMS_TO_PARSE: number
          • DEFAULT_N_TOP_CANDIDATES: number
          • DEFAULT_TAGS_TO_SCORE: string[]
          • DEPRECATED_SIZE_ATTRIBUTE_ELEMS: string[]
          • DIV_TO_P_ELEMS: Set<string>
          • ELEMENT_NODE: number
          • FLAG_CLEAN_CONDITIONALLY: number
          • FLAG_STRIP_UNLIKELYS: number
          • FLAG_WEIGHT_CLASSES: number
          • HTML_ESCAPE_MAP: {
                amp: string;
                apos: string;
                gt: string;
                lt: string;
                quot: string;
            }
            • amp: string
            • apos: string
            • gt: string
            • lt: string
            • quot: string
          • PHRASING_ELEMS: string[]
          • PRESENTATIONAL_ATTRIBUTES: string[]
          • REGEXPS: {
                b64DataUrl: RegExp;
                byline: RegExp;
                extraneous: RegExp;
                hasContent: RegExp;
                hashUrl: RegExp;
                jsonLdArticleTypes: RegExp;
                negative: RegExp;
                nextLink: RegExp;
                normalize: RegExp;
                okMaybeItsACandidate: RegExp;
                positive: RegExp;
                prevLink: RegExp;
                replaceFonts: RegExp;
                shareElements: RegExp;
                srcsetUrl: RegExp;
                tokenize: RegExp;
                unlikelyCandidates: RegExp;
                videos: RegExp;
                whitespace: RegExp;
            }
            • b64DataUrl: RegExp
            • byline: RegExp
            • extraneous: RegExp
            • hasContent: RegExp
            • hashUrl: RegExp
            • jsonLdArticleTypes: RegExp
            • negative: RegExp
            • nextLink: RegExp
            • normalize: RegExp
            • okMaybeItsACandidate: RegExp
            • positive: RegExp
            • prevLink: RegExp
            • replaceFonts: RegExp
            • shareElements: RegExp
            • srcsetUrl: RegExp
            • tokenize: RegExp
            • unlikelyCandidates: RegExp
            • videos: RegExp
            • whitespace: RegExp
          • TEXT_NODE: number
          • UNLIKELY_ROLES: string[]
          • _checkByline: typeof __function
          • _clean: ((e: any, tag: any) => void)

            Clean a node of all elements of type "tag". +

            void

            +
          prototype: {
              ALTER_TO_DIV_EXCEPTIONS: string[];
              CLASSES_TO_PRESERVE: string[];
              DEFAULT_CHAR_THRESHOLD: number;
              DEFAULT_MAX_ELEMS_TO_PARSE: number;
              DEFAULT_N_TOP_CANDIDATES: number;
              DEFAULT_TAGS_TO_SCORE: string[];
              DEPRECATED_SIZE_ATTRIBUTE_ELEMS: string[];
              DIV_TO_P_ELEMS: Set<string>;
              ELEMENT_NODE: number;
              FLAG_CLEAN_CONDITIONALLY: number;
              FLAG_STRIP_UNLIKELYS: number;
              FLAG_WEIGHT_CLASSES: number;
              HTML_ESCAPE_MAP: {
                  amp: string;
                  apos: string;
                  gt: string;
                  lt: string;
                  quot: string;
              };
              PHRASING_ELEMS: string[];
              PRESENTATIONAL_ATTRIBUTES: string[];
              REGEXPS: {
                  b64DataUrl: RegExp;
                  byline: RegExp;
                  extraneous: RegExp;
                  hasContent: RegExp;
                  hashUrl: RegExp;
                  jsonLdArticleTypes: RegExp;
                  negative: RegExp;
                  nextLink: RegExp;
                  normalize: RegExp;
                  okMaybeItsACandidate: RegExp;
                  positive: RegExp;
                  prevLink: RegExp;
                  replaceFonts: RegExp;
                  shareElements: RegExp;
                  srcsetUrl: RegExp;
                  tokenize: RegExp;
                  unlikelyCandidates: RegExp;
                  videos: RegExp;
                  whitespace: RegExp;
              };
              TEXT_NODE: number;
              UNLIKELY_ROLES: string[];
              _checkByline: typeof __function;
              _clean: ((e: any, tag: any) => void);
              _cleanClasses: ((node: any) => void);
              _cleanConditionally: ((e: any, tag: any) => void);
              _cleanHeaders: ((e: any) => void);
              _cleanMatchedNodes: ((e: any, filter: any) => void);
              _cleanStyles: ((e: any) => void);
              _concatNodeLists: ((...args: any) => any);
              _everyNode: ((nodeList: any, fn: any) => any);
              _findNode: ((nodeList: any, fn: any) => any);
              _fixLazyImages: ((root: any) => void);
              _fixRelativeUris: ((articleContent: any) => void);
              _flagIsActive: ((flag: any) => boolean);
              _forEachNode: ((nodeList: any, fn: any) => void);
              _getAllNodesWithTag: ((node: any, tagNames: any) => any);
              _getArticleMetadata: ((jsonld: any) => {
                  byline: any;
                  excerpt: any;
                  siteName: any;
                  title: any;
              });
              _getArticleTitle: (() => string);
              _getCharCount: ((e: any, s: any) => number);
              _getClassWeight: ((e: any) => number);
              _getInnerText: ((e: any, normalizeSpaces: any) => any);
              _getJSONLD: ((doc: any) => {});
              _getLinkDensity: ((element: any) => number);
              _getNextNode: ((node: any, ignoreSelfAndKids: any) => any);
              _getNodeAncestors: ((node: any, maxDepth: any) => any[]);
              _getRowAndColumnCount: ((table: any) => {
                  columns: number;
                  rows: number;
              });
              _getTextDensity: ((e: any, tags: any) => number);
              _grabArticle: typeof __function;
              _hasAncestorTag: ((node: any, tagName: any, maxDepth: any, filterFn: any) => boolean);
              _hasChildBlockElement: ((element: any) => any);
              _hasSingleTagInsideElement: ((element: any, tag: any) => boolean);
              _headerDuplicatesTitle: ((node: any) => boolean);
              _initializeNode: ((node: any) => void);
              _isElementWithoutContent: ((node: any) => boolean);
              _isPhrasingContent: ((node: any) => any);
              _isProbablyVisible: ((node: any) => boolean);
              _isSingleImage: ((node: any) => any);
              _isValidByline: ((byline: any) => boolean);
              _isWhitespace: ((node: any) => boolean);
              _markDataTables: ((root: any) => void);
              _nextNode: ((node: any) => any);
              _postProcessContent: ((articleContent: any) => void);
              _prepArticle: ((articleContent: any) => void);
              _prepDocument: (() => void);
              _removeAndGetNext: ((node: any) => any);
              _removeFlag: typeof __function;
              _removeNodes: ((nodeList: any, filterFn: any) => void);
              _removeScripts: ((doc: any) => void);
              _replaceBrs: ((elem: any) => void);
              _replaceNodeTags: ((nodeList: any, newTagName: any) => void);
              _setNodeTag: ((node: any, tag: any) => any);
              _simplifyNestedElements: ((articleContent: any) => void);
              _someNode: ((nodeList: any, fn: any) => any);
              _textSimilarity: ((textA: any, textB: any) => number);
              _unescapeHtmlEntities: ((str: string) => string);
              _unwrapNoscriptImages: ((doc: any) => void);
              parse: typeof __function;
          }

          Type declaration

          • ALTER_TO_DIV_EXCEPTIONS: string[]
          • CLASSES_TO_PRESERVE: string[]
          • DEFAULT_CHAR_THRESHOLD: number
          • DEFAULT_MAX_ELEMS_TO_PARSE: number
          • DEFAULT_N_TOP_CANDIDATES: number
          • DEFAULT_TAGS_TO_SCORE: string[]
          • DEPRECATED_SIZE_ATTRIBUTE_ELEMS: string[]
          • DIV_TO_P_ELEMS: Set<string>
          • ELEMENT_NODE: number
          • FLAG_CLEAN_CONDITIONALLY: number
          • FLAG_STRIP_UNLIKELYS: number
          • FLAG_WEIGHT_CLASSES: number
          • HTML_ESCAPE_MAP: {
                amp: string;
                apos: string;
                gt: string;
                lt: string;
                quot: string;
            }
            • amp: string
            • apos: string
            • gt: string
            • lt: string
            • quot: string
          • PHRASING_ELEMS: string[]
          • PRESENTATIONAL_ATTRIBUTES: string[]
          • REGEXPS: {
                b64DataUrl: RegExp;
                byline: RegExp;
                extraneous: RegExp;
                hasContent: RegExp;
                hashUrl: RegExp;
                jsonLdArticleTypes: RegExp;
                negative: RegExp;
                nextLink: RegExp;
                normalize: RegExp;
                okMaybeItsACandidate: RegExp;
                positive: RegExp;
                prevLink: RegExp;
                replaceFonts: RegExp;
                shareElements: RegExp;
                srcsetUrl: RegExp;
                tokenize: RegExp;
                unlikelyCandidates: RegExp;
                videos: RegExp;
                whitespace: RegExp;
            }
            • b64DataUrl: RegExp
            • byline: RegExp
            • extraneous: RegExp
            • hasContent: RegExp
            • hashUrl: RegExp
            • jsonLdArticleTypes: RegExp
            • negative: RegExp
            • nextLink: RegExp
            • normalize: RegExp
            • okMaybeItsACandidate: RegExp
            • positive: RegExp
            • prevLink: RegExp
            • replaceFonts: RegExp
            • shareElements: RegExp
            • srcsetUrl: RegExp
            • tokenize: RegExp
            • unlikelyCandidates: RegExp
            • videos: RegExp
            • whitespace: RegExp
          • TEXT_NODE: number
          • UNLIKELY_ROLES: string[]
          • _checkByline: typeof __function
          • _clean: ((e: any, tag: any) => void)

            Clean a node of all elements of type "tag". (Unless it's a youtube/vimeo video. People love movies.)

              • (e, tag): void
              • Parameters

                • e: any
                • tag: any

                Returns void

                void

          • _cleanClasses: ((node: any) => void)

            Removes the class="" attribute from every element in the given @@ -242,8 +279,8 @@

        • _cleanStyles: ((e: any) => void)
        • _concatNodeLists: ((...args: any[]) => any)
        • _concatNodeLists: ((...args: any) => any)
        • _everyNode: ((nodeList: any, fn: any) => any)
        • _getTextDensity: ((e: any, tags: any) => number)
        • _grabArticle: typeof __function

          a document to run upon. Needs to be a full document, complete with body.

          -

          Element

          +

          Element

        • _hasAncestorTag: ((node: any, tagName: any, maxDepth: any, filterFn: any) => boolean)

          Check if a given node has one of its ancestor tag name matching the provided one.

        • void

          -
          diff --git a/docs/classes/src_trafilatura_extractor_settings.Document.html b/docs/classes/src_trafilatura_extractor_settings.Document.html new file mode 100644 index 0000000..fce199c --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_settings.Document.html @@ -0,0 +1,30 @@ +Document | ai-research-agent

          Constructors

          • Returns Document

          Properties

          author: any
          body: any
          categories: any
          comments: any
          commentsbody: any
          date: any
          description: any
          filedate: any
          fingerprint: any
          hostname: any
          id: any
          image: any
          language: any
          license: any
          pagetype: any
          rawText: any
          sitename: any
          tags: any
          text: any
          title: any
          url: any

          Methods

          • Returns Document

          • Returns void

          • Parameters

            • attributes: any

            Returns void

          • Parameters

            • data: any

            Returns Document

          diff --git a/docs/classes/src_trafilatura_extractor_settings.Extractor.html b/docs/classes/src_trafilatura_extractor_settings.Extractor.html new file mode 100644 index 0000000..8815d32 --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_settings.Extractor.html @@ -0,0 +1,27 @@ +Extractor | ai-research-agent

          Constructors

          • Parameters

            • __namedParameters: {
                  authorBlacklist: any;
                  comments: boolean;
                  config: {
                      COOKIE: string;
                      DOWNLOAD_TIMEOUT: string;
                      EXTENSIVE_DATE_SEARCH: string;
                      EXTERNAL_URLS: string;
                      EXTRACTION_TIMEOUT: string;
                      MAX_FILE_SIZE: string;
                      MAX_REDIRECTS: string;
                      MAX_REPETITIONS: string;
                      MIN_DUPLCHECK_SIZE: string;
                      MIN_EXTRACTED_COMM_SIZE: string;
                      MIN_EXTRACTED_SIZE: string;
                      MIN_FILE_SIZE: string;
                      MIN_OUTPUT_COMM_SIZE: string;
                      MIN_OUTPUT_SIZE: string;
                      SLEEP_TIME: string;
                      USER_AGENTS: string;
                  };
                  dateParams: any;
                  dedup: boolean;
                  fast: boolean;
                  formatting: boolean;
                  images: boolean;
                  lang: any;
                  links: boolean;
                  maxTreeSize: any;
                  onlyWithMetadata: boolean;
                  outputFormat: string;
                  precision: boolean;
                  recall: boolean;
                  source: any;
                  tables: boolean;
                  teiValidation: boolean;
                  url: any;
                  urlBlacklist: any;
                  withMetadata: boolean;
              } = {}
              • authorBlacklist: any
              • comments: boolean
              • config: {
                    COOKIE: string;
                    DOWNLOAD_TIMEOUT: string;
                    EXTENSIVE_DATE_SEARCH: string;
                    EXTERNAL_URLS: string;
                    EXTRACTION_TIMEOUT: string;
                    MAX_FILE_SIZE: string;
                    MAX_REDIRECTS: string;
                    MAX_REPETITIONS: string;
                    MIN_DUPLCHECK_SIZE: string;
                    MIN_EXTRACTED_COMM_SIZE: string;
                    MIN_EXTRACTED_SIZE: string;
                    MIN_FILE_SIZE: string;
                    MIN_OUTPUT_COMM_SIZE: string;
                    MIN_OUTPUT_SIZE: string;
                    SLEEP_TIME: string;
                    USER_AGENTS: string;
                }
                • COOKIE: string
                • DOWNLOAD_TIMEOUT: string
                • EXTENSIVE_DATE_SEARCH: string
                • EXTERNAL_URLS: string
                • EXTRACTION_TIMEOUT: string
                • MAX_FILE_SIZE: string
                • MAX_REDIRECTS: string
                • MAX_REPETITIONS: string
                • MIN_DUPLCHECK_SIZE: string
                • MIN_EXTRACTED_COMM_SIZE: string
                • MIN_EXTRACTED_SIZE: string
                • MIN_FILE_SIZE: string
                • MIN_OUTPUT_COMM_SIZE: string
                • MIN_OUTPUT_SIZE: string
                • SLEEP_TIME: string
                • USER_AGENTS: string
              • dateParams: any
              • dedup: boolean
              • fast: boolean
              • formatting: boolean
              • images: boolean
              • lang: any
              • links: boolean
              • maxTreeSize: any
              • onlyWithMetadata: boolean
              • outputFormat: string
              • precision: boolean
              • recall: boolean
              • source: any
              • tables: boolean
              • teiValidation: boolean
              • url: any
              • urlBlacklist: any
              • withMetadata: boolean

            Returns Extractor

          Properties

          authorBlacklist: any
          comments: boolean
          config: any
          dateParams: any
          dedup: boolean
          fast: boolean
          focus: string
          format: any
          formatting: boolean
          images: boolean
          lang: any
          links: boolean
          maxTreeSize: any
          onlyWithMetadata: boolean
          source: any
          tables: boolean
          teiValidation: boolean
          url: any
          urlBlacklist: any
          withMetadata: any

          Methods

          • Parameters

            • config: any

            Returns void

          • Parameters

            • chosenFormat: any

            Returns void

          diff --git a/docs/classes/src_trafilatura_extractor_spider.CrawlParameters.html b/docs/classes/src_trafilatura_extractor_spider.CrawlParameters.html new file mode 100644 index 0000000..637c760 --- /dev/null +++ b/docs/classes/src_trafilatura_extractor_spider.CrawlParameters.html @@ -0,0 +1,19 @@ +CrawlParameters | ai-research-agent

          Constructors

          • Parameters

            • start: any
            • lang: any = null
            • rules: any = null
            • pruneXpath: any = null

            Returns CrawlParameters

          Properties

          base: string
          i: number
          isOn: boolean
          knownNum: number
          lang: any
          pruneXpath: any
          ref: any
          rules: any
          start: any

          Methods

          • Parameters

            • start: any

            Returns string

          • Parameters

            • start: any

            Returns any

          • Parameters

            • todo: any

            Returns any

          • Parameters

            • link: any

            Returns boolean

          • Parameters

            • urlStore: any

            Returns void

          diff --git a/docs/functions/src_autocomplete_autocomplete.suggestNextWordCompletions.html b/docs/functions/src_autocomplete_autocomplete.suggestNextWordCompletions.html index 0fb66f1..c4ecb1f 100644 --- a/docs/functions/src_autocomplete_autocomplete.suggestNextWordCompletions.html +++ b/docs/functions/src_autocomplete_autocomplete.suggestNextWordCompletions.html @@ -1,7 +1,7 @@ suggestNextWordCompletions | ai-research-agent
          • Completes the query with the most likely next words for phrases. If typing 2+ letters of a word, returns all possible words matching those few letters.

            Parameters

            • query: string

              The input query which can be pertial words or phrases.

              -
            • options: {
                  limitMaxResults: number;
                  numberOfLastWordsToCheck: number;
                  phrasesModel: any;
              } = {}
              • limitMaxResults: number

                default=10 - The maximum number of autocomplete suggestions to return.

                +
              • Optionaloptions: {
                    limitMaxResults: number;
                    numberOfLastWordsToCheck: number;
                    phrasesModel: any;
                } = {}
                • limitMaxResults: number

                  default=10 - The maximum number of autocomplete suggestions to return.

                • numberOfLastWordsToCheck: number

                  default=5 - The number of last words in the query to check for phrase completions.

                • phrasesModel: any

                  A custom phrases model to use for autocomplete suggestions.

            Returns Promise<any[]>

            An array of autocomplete suggestions, each containing either a 'phrase' or 'word' property.

            @@ -11,7 +11,7 @@
            // Using options
            const customModel = await import("./custom-phrases-model.json");
            const suggestions = await suggestNextWordCompletions("artificial int", {
            phrasesModel: customModel,
            limitMaxResults: 5,
            numberOfLastWordsToCheck: 3
            });
            // Possible output: [{ phrase: "artificial intelligence" }, { phrase: "artificial interpretation" }]
            -
          diff --git a/docs/functions/src_chrome_extension_allow_cors.modifyChromeAPIAllowCORS.html b/docs/functions/src_chrome_extension_allow_cors.modifyChromeAPIAllowCORS.html index 3d186a2..5b31780 100644 --- a/docs/functions/src_chrome_extension_allow_cors.modifyChromeAPIAllowCORS.html +++ b/docs/functions/src_chrome_extension_allow_cors.modifyChromeAPIAllowCORS.html @@ -10,12 +10,12 @@ -

          Parameters

          diff --git a/docs/functions/src_dataset_import_compile_topic_model.compileTopicModel.html b/docs/functions/src_dataset_import_compile_topic_model.compileTopicModel.html index ae7e7dd..c9b832d 100644 --- a/docs/functions/src_dataset_import_compile_topic_model.compileTopicModel.html +++ b/docs/functions/src_dataset_import_compile_topic_model.compileTopicModel.html @@ -14,13 +14,13 @@ JSON Prefix Trie - arranged by sorting words and phrases for lookup by first word to tokenize by word, then find if it starts a phrase based on entries, for Phrase Extraction from a text.
          There is "unanimous consensus" that Prefix Trie O(1) lookups (instead of having to loop through the index for each lookup) makes it the best data type for this task. -

          Parameters

          diff --git a/docs/functions/src_dataset_import_compile_topic_model.weightWikiWordSpecificity.html b/docs/functions/src_dataset_import_compile_topic_model.weightWikiWordSpecificity.html index 7079c10..d8b563a 100644 --- a/docs/functions/src_dataset_import_compile_topic_model.weightWikiWordSpecificity.html +++ b/docs/functions/src_dataset_import_compile_topic_model.weightWikiWordSpecificity.html @@ -11,7 +11,7 @@ Zenodo. https://doi.org/10.5281/zenodo.3631674 https://github.com/SmartDataAnalytics/Wikipedia_TF_IDF_Dataset

          Parameters

          Returns number

          score for term specificity 0-12~

          -
          diff --git a/docs/functions/src_dataset_import_compress_json_jz64.compressBase64ZipText.html b/docs/functions/src_dataset_import_compress_json_jz64.compressBase64ZipText.html index 6246215..5d84537 100644 --- a/docs/functions/src_dataset_import_compress_json_jz64.compressBase64ZipText.html +++ b/docs/functions/src_dataset_import_compress_json_jz64.compressBase64ZipText.html @@ -1,10 +1,13 @@ compressBase64ZipText | ai-research-agent
          • Compress/decompress any data (such as JSON or text) with JSZip then convert zip binary to a Base64Zip text string which is easier to store in db or files.

            Parameters

            • dataOrZip: string

              data to compress, or Base64Zip to decompress

              -
            • options: {
                  compressionLevel: number;
                  decompress: boolean;
              } = {}
              • compressionLevel: number

                default=9 0-9, 9 has smallest size at ~40% but takes longer

                +
              • Optionaloptions: {
                    compressionLevel: number;
                    decompress: boolean;
                } = {}
                  +
                • +
                +
                • compressionLevel: number

                  default=9 0-9, 9 has smallest size at ~40% but takes longer

                • decompress: boolean

                  default=false false to compress, true to decompress

            Returns Promise<string>

            base64-encoded string of the zipped data

            -
          diff --git a/docs/functions/src_dataset_import_dictionary_import.importDictionary.html b/docs/functions/src_dataset_import_dictionary_import.importDictionary.html index 2d2a1f8..d93a0a3 100644 --- a/docs/functions/src_dataset_import_dictionary_import.importDictionary.html +++ b/docs/functions/src_dataset_import_dictionary_import.importDictionary.html @@ -10,7 +10,7 @@

          Returns any

          McCrae, J.P., Rademaker, A., Bond, F., Rudnicka, E., and Fellbaum, C. (2019). English WordNet 2019 – An Open-Source WordNet for English. In Proceedings of the 10th Global WordNet Conference – GWC 2019, Wrocław. https://aclanthology.org/2019.gwc-1.31/

          -
          diff --git a/docs/functions/src_dataset_import_human_names_import.importHumanNames.html b/docs/functions/src_dataset_import_human_names_import.importHumanNames.html index 31488fe..b9f12ce 100644 --- a/docs/functions/src_dataset_import_human_names_import.importHumanNames.html +++ b/docs/functions/src_dataset_import_human_names_import.importHumanNames.html @@ -1,7 +1,7 @@ importHumanNames | ai-research-agent
          • Import 92k first and last human names sorted by popularity

            Returns any

            American Registry for Internet Numbers (ARIN), a nonprofit which administers IP addresses, Github @arineng/arincli

            -
          diff --git a/docs/functions/src_dataset_import_misspelled_typos_import.importMisspelledTypos.html b/docs/functions/src_dataset_import_misspelled_typos_import.importMisspelledTypos.html index 6c0d625..69e3c21 100644 --- a/docs/functions/src_dataset_import_misspelled_typos_import.importMisspelledTypos.html +++ b/docs/functions/src_dataset_import_misspelled_typos_import.importMisspelledTypos.html @@ -3,7 +3,7 @@ Total unique typos collected: 7969

          Returns any

          Crowd-sourced often-updated Wikipedia list of common misspellings https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings

          -
          diff --git a/docs/functions/src_dataset_import_quora_import.importCommonQueries.html b/docs/functions/src_dataset_import_quora_import.importCommonQueries.html index cc9e661..2896478 100644 --- a/docs/functions/src_dataset_import_quora_import.importCommonQueries.html +++ b/docs/functions/src_dataset_import_quora_import.importCommonQueries.html @@ -4,7 +4,7 @@ Quora question pairs dataset, great for training a semantic similarity model or Query-Response model

          Returns any

          Quora https://huggingface.co/datasets/BeIR/quora

          -
          diff --git a/docs/functions/src_dataset_import_term_frequency_import.importTermFrequency.html b/docs/functions/src_dataset_import_term_frequency_import.importTermFrequency.html index 5b055d4..4ca4704 100644 --- a/docs/functions/src_dataset_import_term_frequency_import.importTermFrequency.html +++ b/docs/functions/src_dataset_import_term_frequency_import.importTermFrequency.html @@ -10,7 +10,7 @@ Total Articles (Wiki-en-2020): 5,989,879

          Returns any

          Galkin, M., Malykh, V. (2020). Wikipedia TF-IDF Dataset Release (v1.0). Zenodo. https://doi.org/10.5281/zenodo.3631674 https://github.com/SmartDataAnalytics/Wikipedia_TF_IDF_Dataset

          -
          diff --git a/docs/functions/src_dataset_import_wikipage_titles_import.importWikiPageTitles.html b/docs/functions/src_dataset_import_wikipage_titles_import.importWikiPageTitles.html index b6355de..5ca8483 100644 --- a/docs/functions/src_dataset_import_wikipage_titles_import.importWikiPageTitles.html +++ b/docs/functions/src_dataset_import_wikipage_titles_import.importWikiPageTitles.html @@ -1,6 +1,6 @@ importWikiPageTitles | ai-research-agent
          diff --git a/docs/functions/src_extract_content_baseline.baseline.html b/docs/functions/src_extract_content_baseline.baseline.html deleted file mode 100644 index 7f48393..0000000 --- a/docs/functions/src_extract_content_baseline.baseline.html +++ /dev/null @@ -1,4 +0,0 @@ -baseline | ai-research-agent
          • Parameters

            • filecontent: any

            Returns any[]

          diff --git a/docs/functions/src_extract_content_baseline.basicCleaning.html b/docs/functions/src_extract_content_baseline.basicCleaning.html deleted file mode 100644 index e7fafbb..0000000 --- a/docs/functions/src_extract_content_baseline.basicCleaning.html +++ /dev/null @@ -1,4 +0,0 @@ -basicCleaning | ai-research-agent
          • Parameters

            • tree: any

            Returns any

          diff --git a/docs/functions/src_extract_content_baseline.loadHtml.html b/docs/functions/src_extract_content_baseline.loadHtml.html deleted file mode 100644 index a12e056..0000000 --- a/docs/functions/src_extract_content_baseline.loadHtml.html +++ /dev/null @@ -1,4 +0,0 @@ -loadHtml | ai-research-agent
          • Parameters

            • content: any

            Returns any

          diff --git a/docs/functions/src_extract_content_baseline.trim.html b/docs/functions/src_extract_content_baseline.trim.html deleted file mode 100644 index 6051cae..0000000 --- a/docs/functions/src_extract_content_baseline.trim.html +++ /dev/null @@ -1,4 +0,0 @@ -trim | ai-research-agent
          • Parameters

            • text: any

            Returns any

          diff --git a/docs/functions/src_extract_content_core.bareExtraction.html b/docs/functions/src_extract_content_core.bareExtraction.html deleted file mode 100644 index 039943d..0000000 --- a/docs/functions/src_extract_content_core.bareExtraction.html +++ /dev/null @@ -1,4 +0,0 @@ -bareExtraction | ai-research-agent
          • Parameters

            • filecontent: any
            • options: any

            Returns Document

          diff --git a/docs/functions/src_extract_content_core.extract.html b/docs/functions/src_extract_content_core.extract.html deleted file mode 100644 index 47f633f..0000000 --- a/docs/functions/src_extract_content_core.extract.html +++ /dev/null @@ -1,4 +0,0 @@ -extract | ai-research-agent
          • Parameters

            • htmlOrDom: any
            • options: {} = {}

              Returns any

            diff --git a/docs/functions/src_extract_content_courlan_clean.cleanQuery.html b/docs/functions/src_extract_content_courlan_clean.cleanQuery.html deleted file mode 100644 index b67f3db..0000000 --- a/docs/functions/src_extract_content_courlan_clean.cleanQuery.html +++ /dev/null @@ -1,11 +0,0 @@ -cleanQuery | ai-research-agent
            • Strip unwanted query elements

              -

              Parameters

              • querystring: string

                The query string to clean

                -
              • Optionalstrict: boolean = false

                Whether to use strict cleaning

                -
              • Optionallanguage: string = null

                The language to use for cleaning

                -

              Returns string

                -
              • The cleaned query string
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_clean.cleanUrl.html b/docs/functions/src_extract_content_courlan_clean.cleanUrl.html deleted file mode 100644 index 3791360..0000000 --- a/docs/functions/src_extract_content_courlan_clean.cleanUrl.html +++ /dev/null @@ -1,10 +0,0 @@ -cleanUrl | ai-research-agent
            • Helper function: chained scrubbing and normalization

              -

              Parameters

              • url: string

                The URL to clean

                -
              • Optionallanguage: string = null

                The language to use for cleaning

                -

              Returns string

                -
              • The cleaned URL or null if invalid
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_clean.decodePunycode.html b/docs/functions/src_extract_content_courlan_clean.decodePunycode.html deleted file mode 100644 index 51d7028..0000000 --- a/docs/functions/src_extract_content_courlan_clean.decodePunycode.html +++ /dev/null @@ -1,9 +0,0 @@ -decodePunycode | ai-research-agent
            • Probe for punycode in lower-cased hostname and try to decode it

              -

              Parameters

              • string: string

                The string to decode

                -

              Returns string

                -
              • The decoded string
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_clean.normalizeFragment.html b/docs/functions/src_extract_content_courlan_clean.normalizeFragment.html deleted file mode 100644 index 952515b..0000000 --- a/docs/functions/src_extract_content_courlan_clean.normalizeFragment.html +++ /dev/null @@ -1,10 +0,0 @@ -normalizeFragment | ai-research-agent
            • Look for trackers in URL fragments using query analysis, normalize the output

              -

              Parameters

              • fragment: string

                The fragment to normalize

                -
              • Optionallanguage: string = null

                The language to use for normalization

                -

              Returns string

                -
              • The normalized fragment
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_clean.normalizePart.html b/docs/functions/src_extract_content_courlan_clean.normalizePart.html deleted file mode 100644 index 1a4e9ef..0000000 --- a/docs/functions/src_extract_content_courlan_clean.normalizePart.html +++ /dev/null @@ -1,9 +0,0 @@ -normalizePart | ai-research-agent
            • Normalize URLs parts (specifically path and fragment) while accounting for certain characters

              -

              Parameters

              • urlPart: string

                The URL part to normalize

                -

              Returns string

                -
              • The normalized URL part
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_clean.normalizeUrl.html b/docs/functions/src_extract_content_courlan_clean.normalizeUrl.html deleted file mode 100644 index 79f137e..0000000 --- a/docs/functions/src_extract_content_courlan_clean.normalizeUrl.html +++ /dev/null @@ -1,12 +0,0 @@ -normalizeUrl | ai-research-agent
            • Takes a URL string or a parsed URL and returns a normalized URL string

              -

              Parameters

              • parsedUrl: string | URL

                The URL to normalize

                -
              • Optionalstrict: boolean = false

                Whether to use strict normalization

                -
              • Optionallanguage: string = null

                The language to use for normalization

                -
              • OptionaltrailingSlash: boolean = true

                Whether to keep trailing slashes

                -

              Returns string

                -
              • The normalized URL
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_clean.scrubUrl.html b/docs/functions/src_extract_content_courlan_clean.scrubUrl.html deleted file mode 100644 index 8c27a7a..0000000 --- a/docs/functions/src_extract_content_courlan_clean.scrubUrl.html +++ /dev/null @@ -1,9 +0,0 @@ -scrubUrl | ai-research-agent
            • Strip unnecessary parts and make sure only one URL is considered

              -

              Parameters

              • url: string

                The URL to scrub

                -

              Returns string

                -
              • The scrubbed URL
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.basicFilter.html b/docs/functions/src_extract_content_courlan_filters.basicFilter.html deleted file mode 100644 index 57ccae6..0000000 --- a/docs/functions/src_extract_content_courlan_filters.basicFilter.html +++ /dev/null @@ -1,9 +0,0 @@ -basicFilter | ai-research-agent
            • Filter URLs based on basic formal characteristics.

              -

              Parameters

              • url: string

                The URL to filter

                -

              Returns boolean

                -
              • True if the URL passes the basic filter, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.domainFilter.html b/docs/functions/src_extract_content_courlan_filters.domainFilter.html deleted file mode 100644 index 915cddf..0000000 --- a/docs/functions/src_extract_content_courlan_filters.domainFilter.html +++ /dev/null @@ -1,9 +0,0 @@ -domainFilter | ai-research-agent
            • Find invalid domain/host names.

              -

              Parameters

              • domain: string

                The domain to filter

                -

              Returns boolean

                -
              • True if the domain is valid, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.extensionFilter.html b/docs/functions/src_extract_content_courlan_filters.extensionFilter.html deleted file mode 100644 index ada9960..0000000 --- a/docs/functions/src_extract_content_courlan_filters.extensionFilter.html +++ /dev/null @@ -1,9 +0,0 @@ -extensionFilter | ai-research-agent
            • Filter based on file extension.

              -

              Parameters

              • urlpath: string

                The URL path to filter

                -

              Returns boolean

                -
              • True if the URL path passes the extension filter, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.isNavigationPage.html b/docs/functions/src_extract_content_courlan_filters.isNavigationPage.html deleted file mode 100644 index ca25951..0000000 --- a/docs/functions/src_extract_content_courlan_filters.isNavigationPage.html +++ /dev/null @@ -1,9 +0,0 @@ -isNavigationPage | ai-research-agent
            • Determine if the URL is related to navigation and overview pages rather than content pages.

              -

              Parameters

              • url: string

                The URL to check

                -

              Returns boolean

                -
              • True if the URL is a navigation page, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.isNotCrawlable.html b/docs/functions/src_extract_content_courlan_filters.isNotCrawlable.html deleted file mode 100644 index 365164e..0000000 --- a/docs/functions/src_extract_content_courlan_filters.isNotCrawlable.html +++ /dev/null @@ -1,9 +0,0 @@ -isNotCrawlable | ai-research-agent
            • Run tests to check if the URL may lead to deep web or pages generally not usable in a crawling context.

              -

              Parameters

              • url: string

                The URL to check

                -

              Returns boolean

                -
              • True if the URL is not crawlable, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.isValidUrl.html b/docs/functions/src_extract_content_courlan_filters.isValidUrl.html deleted file mode 100644 index 76375f5..0000000 --- a/docs/functions/src_extract_content_courlan_filters.isValidUrl.html +++ /dev/null @@ -1,9 +0,0 @@ -isValidUrl | ai-research-agent
            • Determine if a given string is a valid URL.

              -

              Parameters

              • url: string

                The URL to validate

                -

              Returns boolean

                -
              • True if the URL is valid, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.langFilter.html b/docs/functions/src_extract_content_courlan_filters.langFilter.html deleted file mode 100644 index 67381d3..0000000 --- a/docs/functions/src_extract_content_courlan_filters.langFilter.html +++ /dev/null @@ -1,12 +0,0 @@ -langFilter | ai-research-agent
            • Heuristics targeting internationalization and linguistic elements based on a score.

              -

              Parameters

              • url: string

                The URL to filter

                -
              • language: string = null

                The target language

                -
              • strict: boolean = false

                Whether to use strict filtering

                -
              • trailingSlash: boolean = true

                Whether to consider trailing slashes

                -

              Returns boolean

                -
              • True if the URL passes the language filter, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.pathFilter.html b/docs/functions/src_extract_content_courlan_filters.pathFilter.html deleted file mode 100644 index 2514d7f..0000000 --- a/docs/functions/src_extract_content_courlan_filters.pathFilter.html +++ /dev/null @@ -1,10 +0,0 @@ -pathFilter | ai-research-agent
            • Filters based on URL path: index page, imprint, etc.

              -

              Parameters

              • urlpath: string

                The URL path to filter

                -
              • query: string

                The URL query string

                -

              Returns boolean

                -
              • True if the URL path passes the filter, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.typeFilter.html b/docs/functions/src_extract_content_courlan_filters.typeFilter.html deleted file mode 100644 index 6257353..0000000 --- a/docs/functions/src_extract_content_courlan_filters.typeFilter.html +++ /dev/null @@ -1,11 +0,0 @@ -typeFilter | ai-research-agent
            • Make sure the target URL is from a suitable type (HTML page with primarily text).

              -

              Parameters

              • url: string

                The URL to filter

                -
              • strict: boolean = false

                Whether to use strict filtering

                -
              • withNav: boolean = false

                Whether to include navigation pages

                -

              Returns boolean

                -
              • True if the URL passes the type filter, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_filters.validateUrl.html b/docs/functions/src_extract_content_courlan_filters.validateUrl.html deleted file mode 100644 index dddb9fb..0000000 --- a/docs/functions/src_extract_content_courlan_filters.validateUrl.html +++ /dev/null @@ -1,9 +0,0 @@ -validateUrl | ai-research-agent
            • Parse and validate the input.

              -

              Parameters

              • url: string

                The URL to validate

                -

              Returns [boolean, URL]

                -
              • A tuple of validation result and parsed URL
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_meta.addCache.html b/docs/functions/src_extract_content_courlan_meta.addCache.html deleted file mode 100644 index 8ffdbf0..0000000 --- a/docs/functions/src_extract_content_courlan_meta.addCache.html +++ /dev/null @@ -1,6 +0,0 @@ -addCache | ai-research-agent
            • Add a cache to the set of caches that can be cleared

              -

              Parameters

              • cache: any

                The cache object to add

                -

              Returns void

            diff --git a/docs/functions/src_extract_content_courlan_meta.clearCaches.html b/docs/functions/src_extract_content_courlan_meta.clearCaches.html deleted file mode 100644 index 597135e..0000000 --- a/docs/functions/src_extract_content_courlan_meta.clearCaches.html +++ /dev/null @@ -1,6 +0,0 @@ -clearCaches | ai-research-agent
            • Reset all known caches used to speed up processing. -This may release some memory.

              -

              Returns void

            diff --git a/docs/functions/src_extract_content_courlan_network.redirectionTest.html b/docs/functions/src_extract_content_courlan_network.redirectionTest.html deleted file mode 100644 index 12149ba..0000000 --- a/docs/functions/src_extract_content_courlan_network.redirectionTest.html +++ /dev/null @@ -1,12 +0,0 @@ -redirectionTest | ai-research-agent
            • Test final URL to handle redirects

              -

              Parameters

              • url: string

                URL to check

                -

              Returns Promise<string>

                -
              • The final URL seen
              • -
              -
                -
              • If the URL cannot be reached
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.extractDomain.html b/docs/functions/src_extract_content_courlan_urlutils.extractDomain.html deleted file mode 100644 index 5bf9ad7..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.extractDomain.html +++ /dev/null @@ -1,11 +0,0 @@ -extractDomain | ai-research-agent
            • Extract domain name information using top-level domain info

              -

              Parameters

              • url: string

                The URL to extract domain from

                -
              • Optionalblacklist: Set<string> = ...

                A set of blacklisted domains

                -
              • Optionalfast: boolean = false

                Whether to use a faster, regex-based method

                -

              Returns string

                -
              • The extracted domain or null if blacklisted or invalid
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.filterUrls.html b/docs/functions/src_extract_content_courlan_urlutils.filterUrls.html deleted file mode 100644 index 85474d1..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.filterUrls.html +++ /dev/null @@ -1,10 +0,0 @@ -filterUrls | ai-research-agent
            • Return a list of links corresponding to the given substring pattern

              -

              Parameters

              • linkList: string[]

                The list of links to filter

                -
              • urlfilter: string

                The substring pattern to filter by

                -

              Returns string[]

                -
              • The filtered list of links
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.getBaseUrl.html b/docs/functions/src_extract_content_courlan_urlutils.getBaseUrl.html deleted file mode 100644 index 1d1d4c2..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.getBaseUrl.html +++ /dev/null @@ -1,9 +0,0 @@ -getBaseUrl | ai-research-agent
            • Strip URL of some of its parts to get base URL

              -

              Parameters

              • url: string | URL

                The URL to get the base from

                -

              Returns string

                -
              • The base URL
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.getHostAndPath.html b/docs/functions/src_extract_content_courlan_urlutils.getHostAndPath.html deleted file mode 100644 index 69e5033..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.getHostAndPath.html +++ /dev/null @@ -1,9 +0,0 @@ -getHostAndPath | ai-research-agent
            • Decompose URL in two parts: protocol + host/domain and path

              -

              Parameters

              • url: string | URL

                The URL to decompose

                -

              Returns [string, string]

                -
              • A tuple of hostname and path
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.getHostinfo.html b/docs/functions/src_extract_content_courlan_urlutils.getHostinfo.html deleted file mode 100644 index a51877b..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.getHostinfo.html +++ /dev/null @@ -1,9 +0,0 @@ -getHostinfo | ai-research-agent
            • Convenience function returning domain and host info (protocol + host/domain) from a URL

              -

              Parameters

              • url: string

                The URL to get info from

                -

              Returns [string, string]

                -
              • A tuple of domain name and base URL
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.getTldinfo.html b/docs/functions/src_extract_content_courlan_urlutils.getTldinfo.html deleted file mode 100644 index c40d693..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.getTldinfo.html +++ /dev/null @@ -1,10 +0,0 @@ -getTldinfo | ai-research-agent
            • Cached function to extract top-level domain info

              -

              Parameters

              • url: string

                The URL to extract domain info from

                -
              • fast: boolean = false

                Whether to use a faster, regex-based method

                -

              Returns [string, string]

                -
              • A tuple of domain and full domain
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.isExternal.html b/docs/functions/src_extract_content_courlan_urlutils.isExternal.html deleted file mode 100644 index 6080f00..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.isExternal.html +++ /dev/null @@ -1,11 +0,0 @@ -isExternal | ai-research-agent
            • Determine if a link leads to another host

              -

              Parameters

              • url: string

                The URL to check

                -
              • reference: string

                The reference URL

                -
              • OptionalignoreSuffix: boolean = true

                Whether to ignore the suffix in comparison

                -

              Returns boolean

                -
              • True if the URL is external, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_courlan_urlutils.isKnownLink.html b/docs/functions/src_extract_content_courlan_urlutils.isKnownLink.html deleted file mode 100644 index e3e41a8..0000000 --- a/docs/functions/src_extract_content_courlan_urlutils.isKnownLink.html +++ /dev/null @@ -1,10 +0,0 @@ -isKnownLink | ai-research-agent
            • Compare the link and its possible variants to the existing URL base

              -

              Parameters

              • link: string

                The link to check

                -
              • knownLinks: Set<string>

                The set of known links

                -

              Returns boolean

                -
              • True if the link is known, false otherwise
              • -
              -
            diff --git a/docs/functions/src_extract_content_deduplication.contentFingerprint.html b/docs/functions/src_extract_content_deduplication.contentFingerprint.html deleted file mode 100644 index a203b5b..0000000 --- a/docs/functions/src_extract_content_deduplication.contentFingerprint.html +++ /dev/null @@ -1,4 +0,0 @@ -contentFingerprint | ai-research-agent
            • Parameters

              • content: any

              Returns string

            diff --git a/docs/functions/src_extract_content_deduplication.isSimilarDomain.html b/docs/functions/src_extract_content_deduplication.isSimilarDomain.html deleted file mode 100644 index 19cd93c..0000000 --- a/docs/functions/src_extract_content_deduplication.isSimilarDomain.html +++ /dev/null @@ -1,4 +0,0 @@ -isSimilarDomain | ai-research-agent
            • Parameters

              • reference: any
              • newString: any
              • threshold: number = 0.5

              Returns boolean

            diff --git a/docs/functions/src_extract_content_downloads.addToCompressedDict.html b/docs/functions/src_extract_content_downloads.addToCompressedDict.html deleted file mode 100644 index e037e66..0000000 --- a/docs/functions/src_extract_content_downloads.addToCompressedDict.html +++ /dev/null @@ -1,4 +0,0 @@ -addToCompressedDict | ai-research-agent
            • Parameters

              • inputList: any
              • blacklist: any = null
              • urlFilter: any = null
              • urlStore: any = null
              • compression: boolean = false
              • verbose: boolean = false

              Returns any

            diff --git a/docs/functions/src_extract_content_downloads.bufferedDownloads.html b/docs/functions/src_extract_content_downloads.bufferedDownloads.html deleted file mode 100644 index ff7a94a..0000000 --- a/docs/functions/src_extract_content_downloads.bufferedDownloads.html +++ /dev/null @@ -1,4 +0,0 @@ -bufferedDownloads | ai-research-agent
            • Parameters

              • bufferList: any
              • downloadThreads: any
              • decode: boolean = true
              • options: any = null

              Returns AsyncGenerator<any[], void, unknown>

            diff --git a/docs/functions/src_extract_content_downloads.fetchResponse.html b/docs/functions/src_extract_content_downloads.fetchResponse.html deleted file mode 100644 index 8dd7ae3..0000000 --- a/docs/functions/src_extract_content_downloads.fetchResponse.html +++ /dev/null @@ -1,4 +0,0 @@ -fetchResponse | ai-research-agent
            • Parameters

              • url: any
              • __namedParameters: {
                    config: {
                        COOKIE: any;
                        DOWNLOAD_TIMEOUT: number;
                        MAX_REDIRECTS: number;
                        USER_AGENTS: string[];
                    };
                    decode: boolean;
                    noSsl: boolean;
                    withHeaders: boolean;
                } = {}
                • config: {
                      COOKIE: any;
                      DOWNLOAD_TIMEOUT: number;
                      MAX_REDIRECTS: number;
                      USER_AGENTS: string[];
                  }
                  • COOKIE: any
                  • DOWNLOAD_TIMEOUT: number
                  • MAX_REDIRECTS: number
                  • USER_AGENTS: string[]
                • decode: boolean
                • noSsl: boolean
                • withHeaders: boolean

              Returns Promise<Response>

            diff --git a/docs/functions/src_extract_content_downloads.fetchUrl.html b/docs/functions/src_extract_content_downloads.fetchUrl.html deleted file mode 100644 index 0b957e8..0000000 --- a/docs/functions/src_extract_content_downloads.fetchUrl.html +++ /dev/null @@ -1,4 +0,0 @@ -fetchUrl | ai-research-agent
            • Parameters

              • url: any
              • decode: boolean = true
              • noSsl: boolean = false
              • config: {
                    COOKIE: any;
                    DOWNLOAD_TIMEOUT: number;
                    MAX_REDIRECTS: number;
                    USER_AGENTS: string[];
                } = DEFAULT_CONFIG
                • COOKIE: any
                • DOWNLOAD_TIMEOUT: number
                • MAX_REDIRECTS: number
                • USER_AGENTS: string[]
              • options: any = null

              Returns Promise<any>

            diff --git a/docs/functions/src_extract_content_downloads.loadDownloadBuffer.html b/docs/functions/src_extract_content_downloads.loadDownloadBuffer.html deleted file mode 100644 index 5cd8340..0000000 --- a/docs/functions/src_extract_content_downloads.loadDownloadBuffer.html +++ /dev/null @@ -1,4 +0,0 @@ -loadDownloadBuffer | ai-research-agent
            • Parameters

              • urlStore: any
              • sleepTime: number = 5000

              Returns Promise<any[]>

            diff --git a/docs/functions/src_extract_content_external.compareExtraction.html b/docs/functions/src_extract_content_external.compareExtraction.html deleted file mode 100644 index 43ab002..0000000 --- a/docs/functions/src_extract_content_external.compareExtraction.html +++ /dev/null @@ -1,4 +0,0 @@ -compareExtraction | ai-research-agent
            • Parameters

              • tree: any
              • backupTree: any
              • body: any
              • text: any
              • lenText: any
              • options: any

              Returns any[]

            diff --git a/docs/functions/src_extract_content_external.justextRescue.html b/docs/functions/src_extract_content_external.justextRescue.html deleted file mode 100644 index 8417ae8..0000000 --- a/docs/functions/src_extract_content_external.justextRescue.html +++ /dev/null @@ -1,4 +0,0 @@ -justextRescue | ai-research-agent
            • Parameters

              • tree: any
              • options: any

              Returns any[]

            diff --git a/docs/functions/src_extract_content_external.sanitizeTree.html b/docs/functions/src_extract_content_external.sanitizeTree.html deleted file mode 100644 index f8639aa..0000000 --- a/docs/functions/src_extract_content_external.sanitizeTree.html +++ /dev/null @@ -1,4 +0,0 @@ -sanitizeTree | ai-research-agent
            • Parameters

              • tree: any
              • options: any

              Returns any[]

            diff --git a/docs/functions/src_extract_content_feeds.findFeedUrls.html b/docs/functions/src_extract_content_feeds.findFeedUrls.html deleted file mode 100644 index 2ad138d..0000000 --- a/docs/functions/src_extract_content_feeds.findFeedUrls.html +++ /dev/null @@ -1,4 +0,0 @@ -findFeedUrls | ai-research-agent
            • Parameters

              • url: any
              • targetLang: any = null
              • external: boolean = false
              • sleepTime: number = 2000

              Returns any

            diff --git a/docs/functions/src_extract_content_feeds.tryHomepage.html b/docs/functions/src_extract_content_feeds.tryHomepage.html deleted file mode 100644 index 670fd09..0000000 --- a/docs/functions/src_extract_content_feeds.tryHomepage.html +++ /dev/null @@ -1,4 +0,0 @@ -tryHomepage | ai-research-agent
            • Parameters

              • baseurl: any
              • targetLang: any

              Returns any

            diff --git a/docs/functions/src_extract_content_htmlprocessing.buildHtmlOutput.html b/docs/functions/src_extract_content_htmlprocessing.buildHtmlOutput.html deleted file mode 100644 index fdb11ea..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.buildHtmlOutput.html +++ /dev/null @@ -1,4 +0,0 @@ -buildHtmlOutput | ai-research-agent
            • Parameters

              • document: any
              • withMetadata: boolean = false

              Returns string

            diff --git a/docs/functions/src_extract_content_htmlprocessing.collectLinkInfo.html b/docs/functions/src_extract_content_htmlprocessing.collectLinkInfo.html deleted file mode 100644 index 245abde..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.collectLinkInfo.html +++ /dev/null @@ -1,4 +0,0 @@ -collectLinkInfo | ai-research-agent
            • Parameters

              • linksXpath: any

              Returns any[]

            diff --git a/docs/functions/src_extract_content_htmlprocessing.convertDeletions.html b/docs/functions/src_extract_content_htmlprocessing.convertDeletions.html deleted file mode 100644 index 68e73bf..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.convertDeletions.html +++ /dev/null @@ -1,4 +0,0 @@ -convertDeletions | ai-research-agent
            • Parameters

              • elem: any

              Returns void

            diff --git a/docs/functions/src_extract_content_htmlprocessing.convertDetails.html b/docs/functions/src_extract_content_htmlprocessing.convertDetails.html deleted file mode 100644 index d566642..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.convertDetails.html +++ /dev/null @@ -1,4 +0,0 @@ -convertDetails | ai-research-agent
            • Parameters

              • elem: any

              Returns void

            diff --git a/docs/functions/src_extract_content_htmlprocessing.convertLists.html b/docs/functions/src_extract_content_htmlprocessing.convertLists.html deleted file mode 100644 index 8a36a66..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.convertLists.html +++ /dev/null @@ -1,4 +0,0 @@ -convertLists | ai-research-agent
            • Parameters

              • elem: any

              Returns void

            diff --git a/docs/functions/src_extract_content_htmlprocessing.convertQuotes.html b/docs/functions/src_extract_content_htmlprocessing.convertQuotes.html deleted file mode 100644 index 5596177..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.convertQuotes.html +++ /dev/null @@ -1,4 +0,0 @@ -convertQuotes | ai-research-agent
            • Parameters

              • elem: any

              Returns void

            diff --git a/docs/functions/src_extract_content_htmlprocessing.convertToHtml.html b/docs/functions/src_extract_content_htmlprocessing.convertToHtml.html deleted file mode 100644 index 81580f7..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.convertToHtml.html +++ /dev/null @@ -1,4 +0,0 @@ -convertToHtml | ai-research-agent
            • Parameters

              • tree: any

              Returns HTMLHtmlElement

            diff --git a/docs/functions/src_extract_content_htmlprocessing.deleteByLinkDensity.html b/docs/functions/src_extract_content_htmlprocessing.deleteByLinkDensity.html deleted file mode 100644 index fd762f3..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.deleteByLinkDensity.html +++ /dev/null @@ -1,4 +0,0 @@ -deleteByLinkDensity | ai-research-agent
            • Parameters

              • subtree: any
              • tagname: any
              • backtracking: boolean = false
              • favorPrecision: boolean = false

              Returns any

            diff --git a/docs/functions/src_extract_content_htmlprocessing.linkDensityTest.html b/docs/functions/src_extract_content_htmlprocessing.linkDensityTest.html deleted file mode 100644 index ddc5fad..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.linkDensityTest.html +++ /dev/null @@ -1,4 +0,0 @@ -linkDensityTest | ai-research-agent
            • Parameters

              • element: any
              • text: any
              • favorPrecision: boolean = false

              Returns any[]

            diff --git a/docs/functions/src_extract_content_htmlprocessing.linkDensityTestTables.html b/docs/functions/src_extract_content_htmlprocessing.linkDensityTestTables.html deleted file mode 100644 index 09ab2a1..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.linkDensityTestTables.html +++ /dev/null @@ -1,4 +0,0 @@ -linkDensityTestTables | ai-research-agent
            • Parameters

              • element: any

              Returns boolean

            diff --git a/docs/functions/src_extract_content_htmlprocessing.pruneHtml.html b/docs/functions/src_extract_content_htmlprocessing.pruneHtml.html deleted file mode 100644 index 79a474e..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.pruneHtml.html +++ /dev/null @@ -1,4 +0,0 @@ -pruneHtml | ai-research-agent
            • Parameters

              • tree: any
              • focus: string = "balanced"

              Returns any

            diff --git a/docs/functions/src_extract_content_htmlprocessing.pruneUnwantedNodes.html b/docs/functions/src_extract_content_htmlprocessing.pruneUnwantedNodes.html deleted file mode 100644 index 41d6106..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.pruneUnwantedNodes.html +++ /dev/null @@ -1,4 +0,0 @@ -pruneUnwantedNodes | ai-research-agent
            • Parameters

              • tree: any
              • nodelist: any
              • withBackup: boolean = false

              Returns any

            diff --git a/docs/functions/src_extract_content_htmlprocessing.treeCleaning.html b/docs/functions/src_extract_content_htmlprocessing.treeCleaning.html deleted file mode 100644 index c20f3ed..0000000 --- a/docs/functions/src_extract_content_htmlprocessing.treeCleaning.html +++ /dev/null @@ -1,4 +0,0 @@ -treeCleaning | ai-research-agent
            • Parameters

              • tree: any
              • options: any

              Returns any

            diff --git a/docs/functions/src_extract_content_json_metadata.extractJson.html b/docs/functions/src_extract_content_json_metadata.extractJson.html deleted file mode 100644 index 13ea521..0000000 --- a/docs/functions/src_extract_content_json_metadata.extractJson.html +++ /dev/null @@ -1,4 +0,0 @@ -extractJson | ai-research-agent
            • Parameters

              • schema: any
              • metadata: any

              Returns any

            diff --git a/docs/functions/src_extract_content_json_metadata.extractJsonParseError.html b/docs/functions/src_extract_content_json_metadata.extractJsonParseError.html deleted file mode 100644 index 1193d0d..0000000 --- a/docs/functions/src_extract_content_json_metadata.extractJsonParseError.html +++ /dev/null @@ -1,4 +0,0 @@ -extractJsonParseError | ai-research-agent
            • Parameters

              • elem: any
              • metadata: any

              Returns any

            diff --git a/docs/functions/src_extract_content_json_metadata.normalizeAuthors.html b/docs/functions/src_extract_content_json_metadata.normalizeAuthors.html deleted file mode 100644 index aa563fa..0000000 --- a/docs/functions/src_extract_content_json_metadata.normalizeAuthors.html +++ /dev/null @@ -1,4 +0,0 @@ -normalizeAuthors | ai-research-agent
            • Parameters

              • currentAuthors: any
              • authorString: any

              Returns any

            diff --git a/docs/functions/src_extract_content_main_extractor.extractComments.html b/docs/functions/src_extract_content_main_extractor.extractComments.html deleted file mode 100644 index dc739b7..0000000 --- a/docs/functions/src_extract_content_main_extractor.extractComments.html +++ /dev/null @@ -1,4 +0,0 @@ -extractComments | ai-research-agent
            • Parameters

              • tree: any
              • options: any

              Returns any[]

            diff --git a/docs/functions/src_extract_content_main_extractor.extractContent.html b/docs/functions/src_extract_content_main_extractor.extractContent.html deleted file mode 100644 index eef1e94..0000000 --- a/docs/functions/src_extract_content_main_extractor.extractContent.html +++ /dev/null @@ -1,4 +0,0 @@ -extractContent | ai-research-agent
            • Parameters

              • dom: any
              • options: any

              Returns any[]

            diff --git a/docs/functions/src_extract_content_meta.resetCaches.html b/docs/functions/src_extract_content_meta.resetCaches.html deleted file mode 100644 index 7242068..0000000 --- a/docs/functions/src_extract_content_meta.resetCaches.html +++ /dev/null @@ -1,4 +0,0 @@ -resetCaches | ai-research-agent
            • Returns void

            diff --git a/docs/functions/src_extract_content_metadata.extractMetadata.html b/docs/functions/src_extract_content_metadata.extractMetadata.html deleted file mode 100644 index 8b3ba75..0000000 --- a/docs/functions/src_extract_content_metadata.extractMetadata.html +++ /dev/null @@ -1,4 +0,0 @@ -extractMetadata | ai-research-agent
            • Parameters

              • filecontent: any
              • defaultUrl: any = null
              • dateConfig: any = null
              • extensive: boolean = true
              • authorBlacklist: any = null

              Returns any

            diff --git a/docs/functions/src_extract_content_settings.argsToExtractor.html b/docs/functions/src_extract_content_settings.argsToExtractor.html deleted file mode 100644 index d812d6a..0000000 --- a/docs/functions/src_extract_content_settings.argsToExtractor.html +++ /dev/null @@ -1,4 +0,0 @@ -argsToExtractor | ai-research-agent
            • Parameters

              • args: any
              • url: any = null

              Returns Extractor

            diff --git a/docs/functions/src_extract_content_sitemaps.extractRobotsSitemaps.html b/docs/functions/src_extract_content_sitemaps.extractRobotsSitemaps.html deleted file mode 100644 index 3b0aa72..0000000 --- a/docs/functions/src_extract_content_sitemaps.extractRobotsSitemaps.html +++ /dev/null @@ -1,4 +0,0 @@ -extractRobotsSitemaps | ai-research-agent
            • Parameters

              • robotstxt: any
              • baseurl: any

              Returns string[]

            diff --git a/docs/functions/src_extract_content_sitemaps.findRobotsSitemaps.html b/docs/functions/src_extract_content_sitemaps.findRobotsSitemaps.html deleted file mode 100644 index 5364282..0000000 --- a/docs/functions/src_extract_content_sitemaps.findRobotsSitemaps.html +++ /dev/null @@ -1,4 +0,0 @@ -findRobotsSitemaps | ai-research-agent
            • Parameters

              • baseurl: any

              Returns Promise<string[]>

            diff --git a/docs/functions/src_extract_content_sitemaps.isPlausibleSitemap.html b/docs/functions/src_extract_content_sitemaps.isPlausibleSitemap.html deleted file mode 100644 index 50e793a..0000000 --- a/docs/functions/src_extract_content_sitemaps.isPlausibleSitemap.html +++ /dev/null @@ -1,4 +0,0 @@ -isPlausibleSitemap | ai-research-agent
            • Parameters

              • url: any
              • contents: any

              Returns boolean

            diff --git a/docs/functions/src_extract_content_sitemaps.sitemapSearch.html b/docs/functions/src_extract_content_sitemaps.sitemapSearch.html deleted file mode 100644 index 7616b65..0000000 --- a/docs/functions/src_extract_content_sitemaps.sitemapSearch.html +++ /dev/null @@ -1,4 +0,0 @@ -sitemapSearch | ai-research-agent
            • Parameters

              • url: any
              • targetLang: any = null
              • external: boolean = false
              • sleepTime: number = 2000

              Returns Promise<any[]>

            diff --git a/docs/functions/src_extract_content_spider.focusedCrawler.html b/docs/functions/src_extract_content_spider.focusedCrawler.html deleted file mode 100644 index 524b0bc..0000000 --- a/docs/functions/src_extract_content_spider.focusedCrawler.html +++ /dev/null @@ -1,4 +0,0 @@ -focusedCrawler | ai-research-agent
            • Parameters

              • homepage: any
              • maxSeenUrls: number = MAX_SEEN_URLS
              • maxKnownUrls: number = MAX_KNOWN_URLS
              • todo: any = null
              • knownLinks: any = null
              • lang: any = null
              • config: {
                    COOKIE: string;
                    DOWNLOAD_TIMEOUT: string;
                    EXTENSIVE_DATE_SEARCH: string;
                    EXTERNAL_URLS: string;
                    EXTRACTION_TIMEOUT: string;
                    MAX_FILE_SIZE: string;
                    MAX_REDIRECTS: string;
                    MAX_REPETITIONS: string;
                    MIN_DUPLCHECK_SIZE: string;
                    MIN_EXTRACTED_COMM_SIZE: string;
                    MIN_EXTRACTED_SIZE: string;
                    MIN_FILE_SIZE: string;
                    MIN_OUTPUT_COMM_SIZE: string;
                    MIN_OUTPUT_SIZE: string;
                    SLEEP_TIME: string;
                    USER_AGENTS: string;
                } = DEFAULT_CONFIG
                • COOKIE: string
                • DOWNLOAD_TIMEOUT: string
                • EXTENSIVE_DATE_SEARCH: string
                • EXTERNAL_URLS: string
                • EXTRACTION_TIMEOUT: string
                • MAX_FILE_SIZE: string
                • MAX_REDIRECTS: string
                • MAX_REPETITIONS: string
                • MIN_DUPLCHECK_SIZE: string
                • MIN_EXTRACTED_COMM_SIZE: string
                • MIN_EXTRACTED_SIZE: string
                • MIN_FILE_SIZE: string
                • MIN_OUTPUT_COMM_SIZE: string
                • MIN_OUTPUT_SIZE: string
                • SLEEP_TIME: string
                • USER_AGENTS: string
              • rules: any = null
              • pruneXpath: any = null

              Returns any[]

            diff --git a/docs/functions/src_extract_content_utils.controlXmlOutput.html b/docs/functions/src_extract_content_utils.controlXmlOutput.html deleted file mode 100644 index 60e4468..0000000 --- a/docs/functions/src_extract_content_utils.controlXmlOutput.html +++ /dev/null @@ -1,4 +0,0 @@ -controlXmlOutput | ai-research-agent
            • Parameters

              • document: any
              • options: any

              Returns string

            diff --git a/docs/functions/src_extract_content_utils.deleteElement.html b/docs/functions/src_extract_content_utils.deleteElement.html deleted file mode 100644 index 8921429..0000000 --- a/docs/functions/src_extract_content_utils.deleteElement.html +++ /dev/null @@ -1,4 +0,0 @@ -deleteElement | ai-research-agent
            • Parameters

              • element: any
              • keepTail: boolean = true

              Returns void

            diff --git a/docs/functions/src_extract_content_utils.mergeWithParent.html b/docs/functions/src_extract_content_utils.mergeWithParent.html deleted file mode 100644 index 3ca1152..0000000 --- a/docs/functions/src_extract_content_utils.mergeWithParent.html +++ /dev/null @@ -1,4 +0,0 @@ -mergeWithParent | ai-research-agent
            • Parameters

              • element: any
              • includeFormatting: boolean = false

              Returns void

            diff --git a/docs/functions/src_extract_content_utils.removeEmptyElements.html b/docs/functions/src_extract_content_utils.removeEmptyElements.html deleted file mode 100644 index 7631fc2..0000000 --- a/docs/functions/src_extract_content_utils.removeEmptyElements.html +++ /dev/null @@ -1,4 +0,0 @@ -removeEmptyElements | ai-research-agent
            • Parameters

              • tree: any

              Returns any

            diff --git a/docs/functions/src_extract_content_utils.stripDoubleTags.html b/docs/functions/src_extract_content_utils.stripDoubleTags.html deleted file mode 100644 index 2c20186..0000000 --- a/docs/functions/src_extract_content_utils.stripDoubleTags.html +++ /dev/null @@ -1,4 +0,0 @@ -stripDoubleTags | ai-research-agent
            • Parameters

              • tree: any

              Returns any

            diff --git a/docs/functions/src_extract_content_utils.textfilter.html b/docs/functions/src_extract_content_utils.textfilter.html deleted file mode 100644 index 67057b6..0000000 --- a/docs/functions/src_extract_content_utils.textfilter.html +++ /dev/null @@ -1,4 +0,0 @@ -textfilter | ai-research-agent
            • Parameters

              • element: any

              Returns any

            diff --git a/docs/functions/src_extract_content_utils.trim.html b/docs/functions/src_extract_content_utils.trim.html deleted file mode 100644 index a9dd719..0000000 --- a/docs/functions/src_extract_content_utils.trim.html +++ /dev/null @@ -1,4 +0,0 @@ -trim | ai-research-agent
            • Parameters

              • str: any

              Returns any

            diff --git a/docs/functions/src_extract_content_utils.xmlToTxt.html b/docs/functions/src_extract_content_utils.xmlToTxt.html deleted file mode 100644 index b8314a1..0000000 --- a/docs/functions/src_extract_content_utils.xmlToTxt.html +++ /dev/null @@ -1,4 +0,0 @@ -xmlToTxt | ai-research-agent
            • Parameters

              • xmlOutput: any
              • includeFormatting: any

              Returns any

            diff --git a/docs/functions/src_extract_content_xml.buildJsonOutput.html b/docs/functions/src_extract_content_xml.buildJsonOutput.html deleted file mode 100644 index b9a43de..0000000 --- a/docs/functions/src_extract_content_xml.buildJsonOutput.html +++ /dev/null @@ -1,4 +0,0 @@ -buildJsonOutput | ai-research-agent
            • Parameters

              • docmeta: any
              • withMetadata: boolean = true

              Returns string

            diff --git a/docs/functions/src_extract_content_xml.buildTeiOutput.html b/docs/functions/src_extract_content_xml.buildTeiOutput.html deleted file mode 100644 index 9269d98..0000000 --- a/docs/functions/src_extract_content_xml.buildTeiOutput.html +++ /dev/null @@ -1,4 +0,0 @@ -buildTeiOutput | ai-research-agent
            • Parameters

              • docmeta: any

              Returns any

            diff --git a/docs/functions/src_extract_content_xml.checkTei.html b/docs/functions/src_extract_content_xml.checkTei.html deleted file mode 100644 index 38aadaf..0000000 --- a/docs/functions/src_extract_content_xml.checkTei.html +++ /dev/null @@ -1,4 +0,0 @@ -checkTei | ai-research-agent
            • Parameters

              • xmldoc: any
              • url: any

              Returns any

            diff --git a/docs/functions/src_extract_content_xml.deleteElement.html b/docs/functions/src_extract_content_xml.deleteElement.html deleted file mode 100644 index 98b9896..0000000 --- a/docs/functions/src_extract_content_xml.deleteElement.html +++ /dev/null @@ -1,4 +0,0 @@ -deleteElement | ai-research-agent
            • Parameters

              • element: any
              • keepTail: boolean = true

              Returns void

            diff --git a/docs/functions/src_extract_content_xml.removeEmptyElements.html b/docs/functions/src_extract_content_xml.removeEmptyElements.html deleted file mode 100644 index 0718c28..0000000 --- a/docs/functions/src_extract_content_xml.removeEmptyElements.html +++ /dev/null @@ -1,4 +0,0 @@ -removeEmptyElements | ai-research-agent
            • Parameters

              • tree: any

              Returns any

            diff --git a/docs/functions/src_extractor_html_to_cite_extract_author.extractAuthor.html b/docs/functions/src_extractor_html_to_cite_extract_author.extractAuthor.html index 84c1abc..877748b 100644 --- a/docs/functions/src_extractor_html_to_cite_extract_author.extractAuthor.html +++ b/docs/functions/src_extractor_html_to_cite_extract_author.extractAuthor.html @@ -1,6 +1,6 @@ extractAuthor | ai-research-agent
            • Extracts the author from the document and validates it as a human name

              Parameters

              • document: Document

              Returns any

              {author_cite, author_short, author_type} or null if no valid author found

              -
            diff --git a/docs/functions/src_extractor_html_to_cite_extract_cite.extractCite.html b/docs/functions/src_extractor_html_to_cite_extract_cite.extractCite.html index c9fb342..6eeb6d8 100644 --- a/docs/functions/src_extractor_html_to_cite_extract_cite.extractCite.html +++ b/docs/functions/src_extractor_html_to_cite_extract_cite.extractCite.html @@ -7,7 +7,7 @@

            Article-extraction-benchmark

            Parameters

            Returns any

            {author, date, title, source}

            -
            diff --git a/docs/functions/src_extractor_html_to_cite_extract_date.extractDate.html b/docs/functions/src_extractor_html_to_cite_extract_date.extractDate.html index 3b75e67..cb3ae8e 100644 --- a/docs/functions/src_extractor_html_to_cite_extract_date.extractDate.html +++ b/docs/functions/src_extractor_html_to_cite_extract_date.extractDate.html @@ -2,7 +2,7 @@

            Parameters

            Returns string

            Extracted date or null if not found

            -
            diff --git a/docs/functions/src_extractor_html_to_cite_extract_source.extractSource.html b/docs/functions/src_extractor_html_to_cite_extract_source.extractSource.html index 6998d04..e2f4b48 100644 --- a/docs/functions/src_extractor_html_to_cite_extract_source.extractSource.html +++ b/docs/functions/src_extractor_html_to_cite_extract_source.extractSource.html @@ -1,7 +1,7 @@ extractSource | ai-research-agent
            • Extract source from document using common class names

              Parameters

              • document: Document

                document or dom object with article content

              Returns any

              source

              -
            diff --git a/docs/functions/src_extractor_html_to_cite_extract_title.extractTitle.html b/docs/functions/src_extractor_html_to_cite_extract_title.extractTitle.html index 85028ea..efee496 100644 --- a/docs/functions/src_extractor_html_to_cite_extract_title.extractTitle.html +++ b/docs/functions/src_extractor_html_to_cite_extract_title.extractTitle.html @@ -1,7 +1,7 @@ extractTitle | ai-research-agent
            • Extract and clean title from document

              Parameters

              • document: Document

                DOM object with article content

              Returns string

              Extracted and cleaned title

              -
            diff --git a/docs/functions/src_extractor_html_to_cite_human_names_recognize.extractNamedEntity.html b/docs/functions/src_extractor_html_to_cite_human_names_recognize.extractNamedEntity.html index be312c2..5732e71 100644 --- a/docs/functions/src_extractor_html_to_cite_human_names_recognize.extractNamedEntity.html +++ b/docs/functions/src_extractor_html_to_cite_human_names_recognize.extractNamedEntity.html @@ -6,7 +6,7 @@ Author type is ["single", "two-author", "more-than-two", "organization"] where organization is a non-human name that is not reversed.

            Parameters

            Returns any

            {author_cite, author_short, author_type}

            -
            diff --git a/docs/functions/src_extractor_html_to_cite_metadata_to_cite.extractCiteFromMetadata.html b/docs/functions/src_extractor_html_to_cite_metadata_to_cite.extractCiteFromMetadata.html index 9ac1b93..ab4a2ca 100644 --- a/docs/functions/src_extractor_html_to_cite_metadata_to_cite.extractCiteFromMetadata.html +++ b/docs/functions/src_extractor_html_to_cite_metadata_to_cite.extractCiteFromMetadata.html @@ -1,7 +1,7 @@ extractCiteFromMetadata | ai-research-agent
            • Extract cite info from common property names in webpage's metadata

              Parameters

              • doc: Document

                dom object of document

              Returns any

              {author, date, title, source}

              -
            diff --git a/docs/functions/src_extractor_html_to_cite_url_to_domain.convertURLToDomain.html b/docs/functions/src_extractor_html_to_cite_url_to_domain.convertURLToDomain.html index cdc8934..07c52fc 100644 --- a/docs/functions/src_extractor_html_to_cite_url_to_domain.convertURLToDomain.html +++ b/docs/functions/src_extractor_html_to_cite_url_to_domain.convertURLToDomain.html @@ -5,7 +5,7 @@ https://wiki.mozilla.org/TLD_List https://en.wikipedia.org/wiki/List_of_Internet_top-level_domains

            Parameters

            Returns string

            rootDomain

            -
            diff --git a/docs/functions/src_extractor_html_to_cite_url_to_favicon.extractFavicon.html b/docs/functions/src_extractor_html_to_cite_url_to_favicon.extractFavicon.html index a002371..748b2da 100644 --- a/docs/functions/src_extractor_html_to_cite_url_to_favicon.extractFavicon.html +++ b/docs/functions/src_extractor_html_to_cite_url_to_favicon.extractFavicon.html @@ -1,10 +1,10 @@ extractFavicon | ai-research-agent
            • Gets favicon for any URL by parsing the HTML and looking for <link rel="icon"> tags and validates domain.com/favicon.ico by checking if for valid response.

              -

              Parameters

              • url: string
              • options: any = {}

              Returns Promise<string>

              Favicon URL or null if not found

              +

            Parameters

            Returns Promise<string>

            Favicon URL or null if not found

            const favicons = await extractFavicon('https://github.com/')
             
            -
            diff --git a/docs/functions/src_extractor_html_to_content_extract_content.extractMainContent.html b/docs/functions/src_extractor_html_to_content_extract_content.extractMainContent.html deleted file mode 100644 index 5d58e8c..0000000 --- a/docs/functions/src_extractor_html_to_content_extract_content.extractMainContent.html +++ /dev/null @@ -1,77 +0,0 @@ -extractMainContent | ai-research-agent
            • The function extracts main content with regex patterns, cleaning HTML, scoring nodes -based on content indicators like paragraphs and id/class names, selecting -the top candidate, extracting it, and cleaning up content around it.

              -

              Article-extraction-benchmark

              -

              Parameters

              • htmlString: string

                The HTML string to extract content from.

                -
              • options: {
                    removeHTML: boolean;
                } = {}

                Additional options for extraction

                -
                • removeHTML: boolean

                  [default=false] - remove HTML tags and return text with linebreaks

                  -

              Returns string

              The extracted main article content.

              -

              This function works through the following steps to extract the main content:

              -
                -
              1. -

                Define regular expressions:

                -
                  -
                • Various regex patterns are defined to identify content and non-content areas.
                • -
                -
              2. -
              3. -

                Define helper functions:

                -
                  -
                • normalizeSpaces: Normalizes whitespace in a string.
                • -
                • stripTags: Removes all HTML tags from a string.
                • -
                • getTextLength: Calculates the length of text after stripping tags.
                • -
                • calculateLinkDensity: Calculates the ratio of link text to total text.
                • -
                -
              4. -
              5. -

                Clean HTML:

                -
                  -
                • Remove unlikely candidates (e.g., ads, sidebars) from the HTML.
                • -
                -
              6. -
              7. -

                Define scoring function:

                -
                  -
                • scoreNode: Assigns a score to an HTML node based on content and attributes.
                • -
                • Increases score for positive indicators (e.g., article, body, content tags).
                • -
                • Decreases score for negative indicators (e.g., hidden, footer, sidebar tags).
                • -
                • Adds to score based on paragraph tags and text length.
                • -
                -
              8. -
              9. -

                Find and score candidate nodes:

                -
                  -
                • Identify potential content nodes in the cleaned HTML.
                • -
                • Score each node using the scoreNode function.
                • -
                -
              10. -
              11. -

                Select top candidate:

                -
                  -
                • Sort candidates by score and select the highest-scoring node.
                • -
                -
              12. -
              13. -

                Extract content:

                -
                  -
                • Use regex to extract content around the top candidate node.
                • -
                -
              14. -
              15. -

                Clean up extracted content:

                -
                  -
                • Remove script and style tags and their contents.
                • -
                • Process anchor tags based on content density.
                • -
                • Keep only specific HTML tags (a, p, img, h1-h6, ul, ol, li).
                • -
                • Remove excess whitespace from the final content.
                • -
                -
              16. -
              -

              Based on Postlight and Readability

              -
              var url = "https://www.nytimes.com/2024/08/28/business/telegram-ceo-pavel-durov-charged.html"
              const html = await (await fetch(url)).text();
              var articleContent = extractMainArticle(html, {removeHTML: true}); -
              - -
            diff --git a/docs/functions/src_extractor_html_to_content_extract_content_extractor1_content.extractContentHTML.html b/docs/functions/src_extractor_html_to_content_extract_content_extractor1_content.extractContentHTML.html new file mode 100644 index 0000000..50ccea0 --- /dev/null +++ b/docs/functions/src_extractor_html_to_content_extract_content_extractor1_content.extractContentHTML.html @@ -0,0 +1,77 @@ +extractContentHTML | ai-research-agent
            • The function extracts main content with regex patterns, cleaning HTML, scoring nodes +based on content indicators like paragraphs and id/class names, selecting +the top candidate, extracting it, and cleaning up content around it.

              +
                +
              1. +

                Define regular expressions:

                +
                  +
                • Various regex patterns are defined to identify content and non-content areas.
                • +
                +
              2. +
              3. +

                Define helper functions:

                +
                  +
                • normalizeSpaces: Normalizes whitespace in a string.
                • +
                • stripTags: Removes all HTML tags from a string.
                • +
                • getTextLength: Calculates the length of text after stripping tags.
                • +
                • calculateLinkDensity: Calculates the ratio of link text to total text.
                • +
                +
              4. +
              5. +

                Clean HTML:

                +
                  +
                • Remove unlikely candidates (e.g., ads, sidebars) from the HTML.
                • +
                +
              6. +
              7. +

                Define scoring function:

                +
                  +
                • scoreNode: Assigns a score to an HTML node based on content and attributes.
                • +
                • Increases score for positive indicators (e.g., article, body, content tags).
                • +
                • Decreases score for negative indicators (e.g., hidden, footer, sidebar tags).
                • +
                • Adds to score based on paragraph tags and text length.
                • +
                +
              8. +
              9. +

                Find and score candidate nodes:

                +
                  +
                • Identify potential content nodes in the cleaned HTML.
                • +
                • Score each node using the scoreNode function.
                • +
                +
              10. +
              11. +

                Select top candidate:

                +
                  +
                • Sort candidates by score and select the highest-scoring node.
                • +
                +
              12. +
              13. +

                Extract content:

                +
                  +
                • Use regex to extract content around the top candidate node.
                • +
                +
              14. +
              15. +

                Clean up extracted content:

                +
                  +
                • Remove script and style tags and their contents.
                • +
                • Process anchor tags based on content density.
                • +
                • Keep only specific HTML tags (a, p, img, h1-h6, ul, ol, li).
                • +
                • Remove excess whitespace from the final content.
                • +
                +
              16. +
              +

              Article Extraction Benchmark

              +

              Parameters

              • html: any
              • Optionaloptions: {
                    minContentLength: number;
                    minScore: number;
                    minTextLength: number;
                    retryLength: number;
                } = {}
                • minContentLength: number

                  default=140 - Minimum length of content to be considered valid

                  +
                • minScore: number

                  default=20 - Minimum score for content to be considered valid

                  +
                • minTextLength: number

                  default=25 - Minimum length of text to be considered valid

                  +
                • retryLength: number

                  default=250 - Length to retry content extraction if initial attempt fails

                  +

              Returns Element

              Extracted HTML element of main content such as article body

              +
              var url = "https://www.nytimes.com/2024/08/28/business/telegram-ceo-pavel-durov-charged.html"
              const html = await (await fetch(url)).text();
              var articleContent = extractContentHTML(html); +
              + +

              Based on Mozilla Readability (2015), Arc90 (2010)

              +
            diff --git a/docs/functions/src_extractor_html_to_content_extract_content_extractor2_content.extractContentHTML2.html b/docs/functions/src_extractor_html_to_content_extract_content_extractor2_content.extractContentHTML2.html new file mode 100644 index 0000000..1660440 --- /dev/null +++ b/docs/functions/src_extractor_html_to_content_extract_content_extractor2_content.extractContentHTML2.html @@ -0,0 +1,41 @@ +extractContentHTML2 | ai-research-agent
              1. +
              2. The algorithm starts by loading the HTML content using linkedom, a lightweight DOM parser for Node.js.
              3. +
              4. It then applies a series of cleaning and scoring techniques to identify the main content of +the page, starting with stripping unlikely candidates (e.g., elements with class names like "comment" +or "sidebar").
              5. +
              6. The HTML is converted into a series of paragraph elements, which are then scored based on various +factors such as text length, number of commas, and the presence of certain class names or IDs.
              7. +
              8. The algorithm assigns scores to parent and grandparent elements based on the scores of their +children, with parents receiving the full score and grandparents receiving half.
              9. +
              10. After scoring, the algorithm finds the top candidate element by selecting the node with the +highest score.
              11. +
              12. The top candidate's siblings are then examined to see if they should be included in the main +content, based on their scores and other factors like link density.
              13. +
              14. The algorithm then cleans the selected content by removing unnecessary tags, attributes, and empty +elements.
              15. +
              16. It also handles special cases like cleaning up header tags, images, and other potentially irrelevant +content.
              17. +
              18. Throughout the process, the algorithm uses various regular expressions and scoring heuristics to +identify positive and negative indicators of content relevance.
              19. +
              20. Finally, the cleaned and extracted content is returned as an HTML string, representing the main +body of the article or webpage.
              21. +
              +

              Article Extraction Benchmark

              +

              Parameters

              • html: string

                The HTML content to extract from.

                +
              • Optionalopts: {
                    cleanConditionally: boolean;
                    stripUnlikelyCandidates: boolean;
                    weightNodes: boolean;
                }

                The options for content extraction.

                +
                • cleanConditionally: boolean

                  default=true - Clean the node to remove superfluous content +like forms, ads, etc. Initially, pass in the most restrictive options which will return the highest +quality content. On each failure, retry with slightly more lax options.

                  +
                • stripUnlikelyCandidates: boolean

                  default=true - Remove elements that match non-article- +like criteria first (e.g., elements with a classname of "comment").

                  +
                • weightNodes: boolean

                  default=true - Modify an element's score based on certain classNames or +IDs (e.g., subtract if a node has a className of 'comment', add if a node has an ID of 'entry-content').

                  +

              Returns string

              The extracted content as an HTML string, or null if extraction fails.

              +

              Based on Postlight Mercury Parser (2017-)

              +
              var url =  "https://en.wikipedia.org/wiki/David_Hilbert"
              var html = await (await fetch(url)).text();
              var content = extractContentHTML(html);
              console.log(content); // HTML content of main article body +
              + +
            diff --git a/docs/functions/src_extractor_html_to_content_html_special_chars.convertHTMLSpecialChars.html b/docs/functions/src_extractor_html_to_content_html_special_chars.convertHTMLSpecialChars.html index bc1bf86..78ce309 100644 --- a/docs/functions/src_extractor_html_to_content_html_special_chars.convertHTMLSpecialChars.html +++ b/docs/functions/src_extractor_html_to_content_html_special_chars.convertHTMLSpecialChars.html @@ -1,13 +1,13 @@ convertHTMLSpecialChars | ai-research-agent
            • Converts HTML special characters like &<>"'`’ to & escaped codes or vice versa. -It handles named entities, decimal numeric character references, and hexadecimal numeric character references.

              +It handles named entities and hexadecimal numeric character references.

              Parameters

              • str: string

                The string to process.

              • unescape: boolean = true

                default=true - If true, converts & codes to characters. If false, converts characters to codes.

              Returns string

              The processed string.

              -
              convertHTMLSpecialChars('&lt;p&gt;This &amp; that &copy; 2023 &quot;Quotes&quot; &#39;Apostrophes&#39; &euro;100 &#x263A;&lt;/p&gt;', true)
              // Returns: "<p>This & that © 2023 "Quotes" 'Apostrophes' €100 ☺</p>" +
              var normalHTML = convertHTMLSpecialChars('&lt;p&gt;This &amp; that &copy; 2023 '+
              '&quot;Quotes&quot;&#39;Apostrophes&#39; &euro;100 &#x263A;&lt;/p&gt;', true)
              console.log(normalHTML) // Returns: "<p>This & that © 2023 "Quotes" 'Apostrophes' €100 ☺</p>"
              -
            diff --git a/docs/functions/src_extractor_html_to_content_html_to_basic_html.addDOMFunctions.html b/docs/functions/src_extractor_html_to_content_html_to_basic_html.addDOMFunctions.html index 4135b20..9a9123b 100644 --- a/docs/functions/src_extractor_html_to_content_html_to_basic_html.addDOMFunctions.html +++ b/docs/functions/src_extractor_html_to_content_html_to_basic_html.addDOMFunctions.html @@ -1,4 +1,4 @@ -addDOMFunctions | ai-research-agent
            diff --git a/docs/functions/src_extractor_html_to_content_html_to_basic_html.convertHTMLToBasicHTML.html b/docs/functions/src_extractor_html_to_content_html_to_basic_html.convertHTMLToBasicHTML.html index 58c1e52..6c70ac7 100644 --- a/docs/functions/src_extractor_html_to_content_html_to_basic_html.convertHTMLToBasicHTML.html +++ b/docs/functions/src_extractor_html_to_content_html_to_basic_html.convertHTMLToBasicHTML.html @@ -4,11 +4,13 @@ to HTML anyways to display it, and it is better to edit basic HTML in a rich text editor.

            Mozilla DOM Reference
            Source Code of Browser HTML DOM
            -How Blink Works
            RegExp JS V8 Code

            Parameters

            Returns string

            basic text formatting html

            -
            diff --git a/docs/functions/src_extractor_html_to_content_html_to_content.extractContent.html b/docs/functions/src_extractor_html_to_content_html_to_content.extractContent.html deleted file mode 100644 index e47c833..0000000 --- a/docs/functions/src_extractor_html_to_content_html_to_content.extractContent.html +++ /dev/null @@ -1,6 +0,0 @@ -extractContent | ai-research-agent
            • Extracts the main content and cite from a document or HTML string

              -

              Parameters

              • documentOrHTML: any
              • options: any = {}

              Returns any

              {title, author_cite, author_short, author, date, source, html}

              -
            diff --git a/docs/functions/src_extractor_html_to_content_html_to_content.extractContentAndCite.html b/docs/functions/src_extractor_html_to_content_html_to_content.extractContentAndCite.html new file mode 100644 index 0000000..4288749 --- /dev/null +++ b/docs/functions/src_extractor_html_to_content_html_to_content.extractContentAndCite.html @@ -0,0 +1,14 @@ +extractContentAndCite | ai-research-agent
            • Extracts the main content and citation information from a document or HTML string

              +

              Parameters

              • documentOrHTML: any

                The document or HTML string to extract content from

                +
              • options: {
                    formatting: boolean;
                    images: boolean;
                    links: boolean;
                    url: string;
                    useExtractor2: boolean;
                } = {}

                Optional configuration options

                +
                • formatting: boolean

                  default=true - Whether to preserve formatting in the extracted content

                  +
                • images: boolean

                  default=true - Whether to include images in the extracted content

                  +
                • links: boolean

                  default=true - Whether to include links in the extracted content

                  +
                • url: string

                  The URL of the original document, if available, for absolutify-ing URLs

                  +
                • useExtractor2: boolean

                  default=false - false uses Mozilla Readability, true uses Postlight Mercury

                  +

              Returns ExtractedContent

              An object containing extracted information

              +

              If there's an error parsing the HTML

              +
            diff --git a/docs/functions/src_extractor_html_to_content_readability2.extractContentHTML.html b/docs/functions/src_extractor_html_to_content_readability2.extractContentHTML.html deleted file mode 100644 index 5779874..0000000 --- a/docs/functions/src_extractor_html_to_content_readability2.extractContentHTML.html +++ /dev/null @@ -1,24 +0,0 @@ -extractContentHTML | ai-research-agent
            • Extracts main content from HTML documents using algorithm based on Readability. -Employs regex patterns, HTML cleaning, node scoring, and content selection.

              -
                -
              1. Define regex patterns for content identification
              2. -
              3. Clean HTML by removing unlikely content
              4. -
              5. Score nodes based on content quality indicators
              6. -
              7. Select the best candidate for main content
              8. -
              9. Extract top candate
              10. -
              11. Clean the selected content
              12. -
              -

              Parameters

              • html: string

                The HTML string to extract content from

                -
              • options: {
                    minContentLength: number;
                    minScore: number;
                    minTextLength: number;
                    retryLength: number;
                } = {}
                • minContentLength: number

                  default=140 - Minimum length of content to be considered valid

                  -
                • minScore: number

                  default=20 - Minimum score for content to be considered valid

                  -
                • minTextLength: number

                  default=25 - Minimum length of text to be considered valid

                  -
                • retryLength: number

                  default=250 - Length to retry content extraction if initial attempt fails

                  -

              Returns string

              Extracted HTML of main content such as article body

              -

              Mozilla (2015), Arc90 (2010)

              -
              var url = "https://en.wikipedia.org/wiki/David_Hilbert";
              var html = await (await fetch(url)).text();
              var content = extractContentHTML(html); -
              - -
            diff --git a/docs/functions/src_extractor_url_to_content_pdf_to_content.extractPDF.html b/docs/functions/src_extractor_url_to_content_pdf_to_content.convertPDFToHTML.html similarity index 55% rename from docs/functions/src_extractor_url_to_content_pdf_to_content.extractPDF.html rename to docs/functions/src_extractor_url_to_content_pdf_to_content.convertPDFToHTML.html index 7ce5fc1..64f023a 100644 --- a/docs/functions/src_extractor_url_to_content_pdf_to_content.extractPDF.html +++ b/docs/functions/src_extractor_url_to_content_pdf_to_content.convertPDFToHTML.html @@ -1,11 +1,14 @@ -extractPDF | ai-research-agent
            • Extracts formatted text from PDF with parsing of linebreaks , +convertPDFToHTML | ai-research-agent

              • Extracts formatted text from PDF with parsing of linebreaks , page headers, footnotes, and infering section headings based on standard deviation of range from average text height
                https://en.wikipedia.org/wiki/History_of_PDF
                https://github.com/mozilla/pdf.js/releases
                https://www.oreilly.com/library/view/pdf-explained/9781449321581/ch04.html

                Parameters

                • pdfURLOrBuffer: string

                  URL to a PDF file or buffer from fs.readFile

                  -
                • options: {
                      addHeadingsTags: boolean;
                      addPageNumbers: boolean;
                      addSentenceLineBreaks: boolean;
                      moveFootnotes: boolean;
                      removeHyphens: boolean;
                      removePageHeaders: boolean;
                      timeout: boolean;
                  } = {}
                  • addHeadingsTags: boolean

                    default=true - Adds H1 tags to heading titles in document

                    +
                  • Optionaloptions: {
                        addHeadingsTags: boolean;
                        addPageNumbers: boolean;
                        addSentenceLineBreaks: boolean;
                        moveFootnotes: boolean;
                        removeHyphens: boolean;
                        removePageHeaders: boolean;
                        timeout: boolean;
                    } = {}
                      +
                    • +
                    +
                    • addHeadingsTags: boolean

                      default=true - Adds H1 tags to heading titles in document

                    • addPageNumbers: boolean

                      default=true - Adds # to end of each page

                    • addSentenceLineBreaks: boolean

                      default=true - Inserts line breaks at the end of sentence ranges

                    • moveFootnotes: boolean

                      default=true - Moves footnotes to end of document

                      @@ -13,7 +16,7 @@
                    • removePageHeaders: boolean

                      default=true - Removes repeated headers found on each page

                    • timeout: boolean

                      default=5 - http request timeout

                Returns any

                HTML formatted text or {error} if error in parsing

                -
              diff --git a/docs/functions/src_extractor_url_to_content_pdf_to_content.isUrlPDF.html b/docs/functions/src_extractor_url_to_content_pdf_to_content.isUrlPDF.html index 8e64de1..1758cb8 100644 --- a/docs/functions/src_extractor_url_to_content_pdf_to_content.isUrlPDF.html +++ b/docs/functions/src_extractor_url_to_content_pdf_to_content.isUrlPDF.html @@ -3,7 +3,7 @@ Useful for hidden pdf url that does not end with pdf

              Parameters

              • url: string

                The URL to check.

              Returns Promise<boolean>

              True if the URL points to a PDF, false otherwise.

              -
            diff --git a/docs/functions/src_extractor_url_to_content_scrape_url.scrapeURL.html b/docs/functions/src_extractor_url_to_content_scrape_url.scrapeURL.html index 431e735..2b9399e 100644 --- a/docs/functions/src_extractor_url_to_content_scrape_url.scrapeURL.html +++ b/docs/functions/src_extractor_url_to_content_scrape_url.scrapeURL.html @@ -3,11 +3,15 @@ Scraping internet pages is a free speech right globally.

            Parameters

            Returns Promise<any>

            diff --git a/docs/functions/src_extractor_url_to_content_url_to_content.extract.html b/docs/functions/src_extractor_url_to_content_url_to_content.extract.html index a5133da..5063ae3 100644 --- a/docs/functions/src_extractor_url_to_content_url_to_content.extract.html +++ b/docs/functions/src_extractor_url_to_content_url_to_content.extract.html @@ -7,7 +7,10 @@ footnotes, and adding linebreaks based on standard deviation of range text height.


            Parameters

            Returns Article

            -
            diff --git a/docs/functions/src_extractor_url_to_content_youtube_embed.embedYoutubePlayer.html b/docs/functions/src_extractor_url_to_content_youtube_embed.embedYoutubePlayer.html index 37a0ed3..f37e0df 100644 --- a/docs/functions/src_extractor_url_to_content_youtube_embed.embedYoutubePlayer.html +++ b/docs/functions/src_extractor_url_to_content_youtube_embed.embedYoutubePlayer.html @@ -5,7 +5,7 @@
            // <div id="player"></div>
            const YT = embedYoutubePlayer();
            new YT.Player('player', {
            height: '360',
            width: '640',
            videoId: 'dQw4w9WgXcQ',
            events: {
            'onReady': onPlayerReady,
            'onStateChange': null,
            'onTimeChange': onTimeChange,
            }
            });
            function onPlayerReady(event) {
            event.target.playVideo();
            }
            function onTimeChange(time) {
            console.log(time)
            }
            -
            diff --git a/docs/functions/src_extractor_url_to_content_youtube_to_text.extractYoutubeText.html b/docs/functions/src_extractor_url_to_content_youtube_to_text.extractYoutubeText.html index 6ade13a..e7b9f6c 100644 --- a/docs/functions/src_extractor_url_to_content_youtube_to_text.extractYoutubeText.html +++ b/docs/functions/src_extractor_url_to_content_youtube_to_text.extractYoutubeText.html @@ -1,10 +1,13 @@ extractYoutubeText | ai-research-agent
            • Fetch youtube.com video's webpage HTML for embedded transcript if blocked, use scraper of alternative sites

              -

              Parameters

              • videoUrl: string
              • options: {
                    addTimestamps: boolean;
                    timeout: boolean;
                } = {}
                • addTimestamps: boolean

                  default=true - true to return timestamps, default true

                  +

                  Parameters

                  • videoUrl: string
                  • Optionaloptions: {
                        addTimestamps: boolean;
                        timeout: boolean;
                    } = {}
                      +
                    • +
                    +
                    • addTimestamps: boolean

                      default=true - true to return timestamps, default true

                    • timeout: boolean

                      default=5 - http request timeout

                  Returns any

                  {content, timestamps} where content is the full text of the transcript, and timestamps is an array of [characterIndex, timeSeconds]

                  -
            diff --git a/docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToHNSW.html b/docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToHNSW.html new file mode 100644 index 0000000..c949ed8 --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToHNSW.html @@ -0,0 +1,15 @@ +convertEmbeddingsToHNSW | ai-research-agent
            • Generates vectors for a set of documents and creates an HNSW index using +hnswlib-node WASM JS for efficient similarity search.

              +

              ANN Benchmarks

              +Pinecone - HNSW
              +Wikipedia - HNSW

              +

              Parameters

              • documents: string[]

                An array of document texts to be vectorized.

                +
              • Optionaloptions: {
                    maxElements: number;
                    numDimensions: number;
                } = {}

                Optional parameters for vector generation and indexing.

                +
                • maxElements: number

                  The maximum number of data points.

                  +
                • numDimensions: number

                  The length of data point vector that will be indexed.

                  +

              Returns Promise<HierarchicalNSW>

              The created HNSW index.

              +
            diff --git a/docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToUMAP.html b/docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToUMAP.html new file mode 100644 index 0000000..e3d21ee --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.convertEmbeddingsToUMAP.html @@ -0,0 +1,13 @@ +convertEmbeddingsToUMAP | ai-research-agent
            • Converts embeddings to UMAP coordinates.

              +

              Understanding UMAP
              +UMAP Algorithm Overview

              +

              Parameters

              • embeddingsDict: {}

                The dictionary of embeddings.

                +
                • Optionaloptions: {
                      numberDimensions: number;
                      numberDistance: number;
                      numberNeighbors: number;
                  } = {}
                  • numberDimensions: number

                    [default=2] - The number of dimensions for UMAP output.

                    +
                  • numberDistance: number

                    [default=0.1] - The minimum distance parameter for UMAP.

                    +
                  • numberNeighbors: number

                    [default=15] - The number of nearest neighbors for UMAP.

                    +

                Returns Promise<PlotDataPoint[]>

                An array of plot data points.

                +
              diff --git a/docs/functions/src_graph_embeddings_to_graph.convertTextToEmbeddingVector.html b/docs/functions/src_graph_embeddings_to_graph.convertTextToEmbeddingVector.html new file mode 100644 index 0000000..8c2a1ab --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.convertTextToEmbeddingVector.html @@ -0,0 +1,17 @@ +convertTextToEmbeddingVector | ai-research-agent
              • Text embeddings convert words or phrases into numerical vectors in a high-dimensional +space, where each dimension represents a semantic feature extracted by a model like +MiniLM-L6-v2. In this concept space, words with similar meanings have vectors that +are close together, allowing for quantitative comparisons of semantic similarity. +These vector representations enable powerful applications in natural language processing, +including semantic search, text classification, and clustering, by leveraging the +geometric properties of the embedding space to capture and analyze the relationships +between words and concepts. +Text Embeddings, Classification, and Semantic Search (Youtube)

                +


                +

                Parameters

                • text: string

                  The text to embed.

                  +
                • Optionaloptions: {
                      modelName: string;
                      precision: number;
                  } = {}
                  • modelName: string

                    default="Xenova/all-MiniLM-L6-v2" - The name of the model to use

                    +
                  • precision: number

                    default=3 - The number of decimal places to round to.

                    +

                Returns Promise<{
                    embedding: number[];
                    embeddingsDict: {};
                }>

              diff --git a/docs/functions/src_graph_embeddings_to_graph.cosineSimilarity.html b/docs/functions/src_graph_embeddings_to_graph.cosineSimilarity.html new file mode 100644 index 0000000..8d29584 --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.cosineSimilarity.html @@ -0,0 +1,4 @@ +cosineSimilarity | ai-research-agent
              • Parameters

                • vecA: any
                • vecB: any

                Returns number

              diff --git a/docs/functions/src_graph_embeddings_to_graph.getAllEmbeddings.html b/docs/functions/src_graph_embeddings_to_graph.getAllEmbeddings.html new file mode 100644 index 0000000..6442f8d --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.getAllEmbeddings.html @@ -0,0 +1,8 @@ +getAllEmbeddings | ai-research-agent
              • Retrieves all embeddings from the HNSW index.

                +

                Parameters

                • index: HierarchicalNSW

                  The HNSW index containing the embeddings.

                  +
                • precision: number = 3

                Returns Promise<number[][]>

                A promise that resolves to an array of embedding vectors.

                +

                getAllEmbeddings

                +
              diff --git a/docs/functions/src_graph_embeddings_to_graph.getEmbeddingPipeline.html b/docs/functions/src_graph_embeddings_to_graph.getEmbeddingPipeline.html new file mode 100644 index 0000000..91fe24d --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.getEmbeddingPipeline.html @@ -0,0 +1,6 @@ +getEmbeddingPipeline | ai-research-agent
              • Initialize HuggingFace Transformers pipeline for embedding text.

                +

                Returns Promise<AutoTokenizer>

                The pipeline.

                +
              diff --git a/docs/functions/src_graph_embeddings_to_graph.searchWithQuery.html b/docs/functions/src_graph_embeddings_to_graph.searchWithQuery.html new file mode 100644 index 0000000..59adff2 --- /dev/null +++ b/docs/functions/src_graph_embeddings_to_graph.searchWithQuery.html @@ -0,0 +1,4 @@ +searchWithQuery | ai-research-agent
              • Parameters

                • index: any
                • query: any
                • options: {} = {}

                  Returns Promise<any>

                diff --git a/docs/functions/src_graph_save_hnsw.convertEmbeddingsIndexToBase64.html b/docs/functions/src_graph_save_hnsw.convertEmbeddingsIndexToBase64.html new file mode 100644 index 0000000..f7b8a6c --- /dev/null +++ b/docs/functions/src_graph_save_hnsw.convertEmbeddingsIndexToBase64.html @@ -0,0 +1,10 @@ +convertEmbeddingsIndexToBase64 | ai-research-agent
                • Writes an HNSW index to a base64 encoded string.

                  +

                  Parameters

                  • index: any

                    The HNSW index object.

                    +
                  • numDimensions: number

                    The number of dimensions in the index.

                    +
                  • maxElements: number

                    The maximum number of elements in the index.

                    +

                  Returns string

                  A base64 encoded string representation of the index.

                  +

                  If there's an error during the index serialization process.

                  +
                diff --git a/docs/functions/src_match_compare_letters.calculateSimilarityByCharacter.html b/docs/functions/src_match_compare_letters.calculateSimilarityByCharacter.html index 30dfea9..b0a3982 100644 --- a/docs/functions/src_match_compare_letters.calculateSimilarityByCharacter.html +++ b/docs/functions/src_match_compare_letters.calculateSimilarityByCharacter.html @@ -9,7 +9,7 @@
              • s2: string

                Second string

              • Returns number

                Jaro-Winkler similarity score

                Matthew Jaro, William Winkler (1990)

                -
                diff --git a/docs/functions/src_match_match_quasar.matchQUASAR.html b/docs/functions/src_match_match_quasar.matchQUASAR.html index 1c16cb1..a87f8eb 100644 --- a/docs/functions/src_match_match_quasar.matchQUASAR.html +++ b/docs/functions/src_match_match_quasar.matchQUASAR.html @@ -1,13 +1,13 @@ -matchQUASAR | ai-research-agent
                • QUASAR: Quotes-Unifying Alphanumeric Search-All RegExp

                  +matchQUASAR | ai-research-agent
                  • QUASAR: Quotes-Unifying Alphanumeric Search-All RegExp

                    Search document for all words of query ignoring casing but "words in quotes" as necessarily together like users expect in web search engines. Single line function that can be used anywhere, such as UI inputs to filter a data list.

                    -

                    Parameters

                    • document: string
                    • query: string

                    Returns boolean

                    true if doc has all words and "words in phrases"

                    -
                    var isFound = matchQUASAR(`Ask not what your country can do for you, ask what you can do for your country. 
                    There is nothing to fear but fear itself.`, ` "Ask not" "but fear itself" nothing`) +

                    Parameters

                    • document: string
                    • query: string

                    Returns boolean

                    true if doc has all words and "phrases in quotes"

                    +
                    var isFound = matchQUASAR(`Ask not what your country can do for you, 
                    ask what you can do for your country. is nothing to fear but fear itself.`,
                    ` "Ask not" "but fear itself" nothing`) // returns true
                    -
                  diff --git a/docs/functions/src_match_softmax.calculateProbabilitySoftmax.html b/docs/functions/src_match_softmax.calculateProbabilitySoftmax.html index 521e273..fdb6f6c 100644 --- a/docs/functions/src_match_softmax.calculateProbabilitySoftmax.html +++ b/docs/functions/src_match_softmax.calculateProbabilitySoftmax.html @@ -1,5 +1,4 @@ -calculateProbabilitySoftmax | ai-research-agent
                  • Calculates the Softmax of an array of numbers.

                    -

                    The Softmax +calculateProbabilitySoftmax | ai-research-agent

                    diff --git a/docs/functions/src_match_weigh_relevance_frequency.calculatePhraseSpecificity.html b/docs/functions/src_match_weigh_relevance_frequency.calculatePhraseSpecificity.html index b5a2989..dab7fff 100644 --- a/docs/functions/src_match_weigh_relevance_frequency.calculatePhraseSpecificity.html +++ b/docs/functions/src_match_weigh_relevance_frequency.calculatePhraseSpecificity.html @@ -2,7 +2,7 @@ Words are tokenized into phrases and their specificity is calculated based on how many Wiki pages they appear in.

                    Parameters

                    • phrase: string
                    • options: any

                    Returns number

                    domain specificity 0-12~

                    -
                  diff --git a/docs/functions/src_match_weigh_relevance_frequency.weighRelevanceTermFrequency.html b/docs/functions/src_match_weigh_relevance_frequency.weighRelevanceTermFrequency.html index b911a26..82e3ff6 100644 --- a/docs/functions/src_match_weigh_relevance_frequency.weighRelevanceTermFrequency.html +++ b/docs/functions/src_match_weigh_relevance_frequency.weighRelevanceTermFrequency.html @@ -4,7 +4,7 @@ Data Science". https://www.youtube.com/watch?v=ruBm9WywevM

                  Parameters

                  • document: string

                    a single document to calculate the score for

                  • query: string

                    phrase to search tf and idf for each word

                    -
                  • options: {
                        avgDocWordCount: number;
                        normalizeLength: number;
                        saturationWeight: number;
                        totalWikiPages: number;
                    } = {}
                    • avgDocWordCount: number

                      Estimated average word count of all documents

                      +
                    • Optionaloptions: {
                          avgDocWordCount: number;
                          normalizeLength: number;
                          saturationWeight: number;
                          totalWikiPages: number;
                      } = {}
                      • avgDocWordCount: number

                        Estimated average word count of all documents

                      • normalizeLength: number

                        normalizeLengthcontrols the document length normalization. It ranges from 0 to 1, with 0.75 being a common default value. When normalizeLength=1: Full length normalization is applied. @@ -14,7 +14,7 @@ As saturationWeight increases: The impact of term frequency increases (i.e., multiple occurrences of a term in a document become more significant).

                      • totalWikiPages: number

                        Total number of Wikipedia pages used to calculate IDF

                  Returns number

                  score for term specificity

                  -
                diff --git a/docs/functions/src_search_web_search_stream.searchSTREAM.html b/docs/functions/src_search_web_search_stream.searchSTREAM.html index 577de6a..a9e39bd 100644 --- a/docs/functions/src_search_web_search_stream.searchSTREAM.html +++ b/docs/functions/src_search_web_search_stream.searchSTREAM.html @@ -7,26 +7,16 @@ 5. Uses a Research Agent prompt with key sentences from relevant sources to generate an answer via Groq Llama, OpenAI, or Anthropic API, and suggests follow-up queries.

                Parameters

                • query: string

                  The search query string.

                  -
                • options: {
                      categoryIndex: number;
                      maxRetries: number;
                      maxTopResultsToExtract: number;
                      recencyIndex: number;
                      selectedDomain: string;
                  } = {}

                  default { -categoryIndex = 0, -recencyIndex = 0, -maxRetries = 8, -maxTopResultsToExtract = 3, -} - -categoryIndex=0 - Index of the search category. -recencyIndex=0 - Index representing the recency of results. -maxRetries=5 - Maximum number of retry attempts for the search. -maxTopResultsToExtract=6 - Maximum number of top results to extract and analyze.

                  -
                  • categoryIndex: number

                    default=0 - Index of the search category.

                    +
                  • Optionaloptions: {
                        categoryIndex: number;
                        maxRetries: number;
                        maxTopResultsToExtract: number;
                        recencyIndex: number;
                        selectedDomain: string;
                    } = {}
                    • categoryIndex: number

                      default=0 - Index of the search category.

                    • maxRetries: number

                      default=5 - Maximum number of retry attempts for the search.

                    • maxTopResultsToExtract: number

                      default=6 - Maximum number of top results to extract and analyze.

                    • recencyIndex: number

                      default=0 - Index representing the recency of results.

                    • selectedDomain: string

                      default=null - Use your custom domain SearXNG

                Returns Promise<any[]>

                A promise that resolves to an array containing the search results, extracted information, and generated answer.

                -
                const advancedResults = await searchSTREAM('Latest developments in quantum computing', {
                categoryIndex: 2,
                recencyIndex: 1,
                maxRetries: 5,
                maxTopResultsToExtract: 10
                }); +
                const advancedResults = await searchSTREAM('Latest developments in quantum computing', {
                categoryIndex: 2,
                recencyIndex: 1,
                maxRetries: 5,
                maxTopResultsToExtract: 10
                });
                -
                diff --git a/docs/functions/src_search_web_search_web.searchWeb.html b/docs/functions/src_search_web_search_web.searchWeb.html index 9104549..d55e17e 100644 --- a/docs/functions/src_search_web_search_web.searchWeb.html +++ b/docs/functions/src_search_web_search_web.searchWeb.html @@ -3,7 +3,10 @@ times to retry other domains if first time fails. SearXNG is a free internet metasearch engine which aggregates results from more than 70 search services. Users are neither tracked nor profiled.

                Parameters

                • query: string

                  The search query string.

                  -
                • options: {
                      category: number;
                      maxRetries: number;
                      recency: number;
                      selectedDomain: string;
                  } = {}
                  • category: number

                    default=0 - ["general", "news", "videos", "images", +

                  • Optionaloptions: {
                        category: number;
                        maxRetries: number;
                        recency: number;
                        selectedDomain: string;
                    } = {}
                      +
                    • +
                    +
                    • category: number

                      default=0 - ["general", "news", "videos", "images", "science", "map", "music", "it", "files", "social+media"]

                    • maxRetries: number

                      default=3 - Maximum number of retry attempts if the initial search fails.

                    • recency: number

                      default=0 - ["", "day", "week", "month", "year"]

                      @@ -14,7 +17,7 @@
                      const advancedResults = await searchWeb('Node.js', {
                      category: 2,
                      recency: 1,
                      maxRetries: 5
                      });
                      -
                diff --git a/docs/functions/src_search_web_search_wikipedia.searchWikipedia.html b/docs/functions/src_search_web_search_wikipedia.searchWikipedia.html index e63ba46..bed615f 100644 --- a/docs/functions/src_search_web_search_wikipedia.searchWikipedia.html +++ b/docs/functions/src_search_web_search_wikipedia.searchWikipedia.html @@ -3,7 +3,7 @@ documentation and is dificult to parse and clean up results.

                Parameters

                • query: string

                  search phrase

                  -
                • options: {
                      filterDisambiguation: boolean;
                      imageSize: number;
                      images: boolean;
                      limitSearchResults: number;
                      plainText: boolean;
                      searchInTitleOnly: boolean;
                      summarySentenceLimit: number;
                  } = {}
                  • filterDisambiguation: boolean

                    default=true Filter disambiguation pages

                    +
                  • Optionaloptions: {
                        filterDisambiguation: boolean;
                        imageSize: number;
                        images: boolean;
                        limitSearchResults: number;
                        plainText: boolean;
                        searchInTitleOnly: boolean;
                        summarySentenceLimit: number;
                    } = {}
                    • filterDisambiguation: boolean

                      default=true Filter disambiguation pages

                    • imageSize: number

                      default=200 Image size in pixels

                    • images: boolean

                      default=true Include image in results

                    • limitSearchResults: number

                      default=1 Limit number of search results

                      @@ -14,7 +14,7 @@
                      await searchWikipedia("JavaScript", { plainText: true })
                       
                      -
                diff --git a/docs/functions/src_similarity_similarity_concept.vectorizeTextAsConcept.html b/docs/functions/src_similarity_similarity_concept.vectorizeTextAsConcept.html deleted file mode 100644 index 62059d1..0000000 --- a/docs/functions/src_similarity_similarity_concept.vectorizeTextAsConcept.html +++ /dev/null @@ -1,16 +0,0 @@ -vectorizeTextAsConcept | ai-research-agent
                • Text embeddings convert words or phrases into numerical vectors in a high-dimensional -space, where each dimension represents a semantic feature extracted by a model like -MiniLM-L6-v2. In this concept space, words with similar meanings have vectors that -are close together, allowing for quantitative comparisons of semantic similarity. -These vector representations enable powerful applications in natural language processing, -including semantic search, text classification, and clustering, by leveraging the -geometric properties of the embedding space to capture and analyze the relationships -between words and concepts.

                  - -

                  Text Embeddings, Classification, and Semantic Search (Youtube)

                  -

                  Parameters

                  • input: string | string[]
                  • options: {
                        batchSize: number;
                        modelName: string;
                    } = {}
                    • batchSize: number

                      default=512 - chunk size for each batch

                      -
                    • modelName: string

                      default="Xenova/all-MiniLM-L6-v2" - The name of the model to use

                      -

                  Returns Promise<number[][]>

                diff --git a/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVector.html b/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVector.html index 84e6c89..8189732 100644 --- a/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVector.html +++ b/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVector.html @@ -1,8 +1,11 @@ weighRelevanceConceptVector | ai-research-agent
                • Rerank documents's chunks based on relevance to query, based on cosine similarity of their concept vectors generated by a 20MB MiniLM transformer model downloaded locally. -"A Complete Overview of Word Embeddings" https://www.youtube.com/watch?v=5MaWmXwxFNQ&t=323s

                  -

                  Parameters

                  • documents: string[]
                  • query: string
                  • options: any = {}

                  Returns Promise<{
                      content: string;
                      similarity: number;
                  }[]>

                diff --git a/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVectorAPI.html b/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVectorAPI.html index d7256b2..6102e37 100644 --- a/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVectorAPI.html +++ b/docs/functions/src_similarity_similarity_concept.weighRelevanceConceptVectorAPI.html @@ -6,10 +6,13 @@ or longer passage, depending on the model being used.

              • sentences: string[]

                A list of strings which will be compared against the source_sentence.

                -
              • options: {
                    HF_API_KEY: string;
                    model: string;
                } = {}

                Returns Promise<any>

                array of 0-1 similarity scores for each sentence

                -
              • diff --git a/docs/functions/src_tokenize_sentences.splitSentences.html b/docs/functions/src_tokenize_sentences.splitSentences.html index 222ca91..e9e57c0 100644 --- a/docs/functions/src_tokenize_sentences.splitSentences.html +++ b/docs/functions/src_tokenize_sentences.splitSentences.html @@ -1,11 +1,14 @@ splitSentences | ai-research-agent
                • Splits text into sentences, handling 220+ common abbreviations, and infering acronyms, numbers, URLs, times, names, etc.

                  Parameters

                  • inputText: string

                    The text to be split into sentences.

                    -
                  • options: {
                        maxSize: number;
                        minSize: number;
                        splitOnHtmlTags: boolean;
                    } = {}
                    • maxSize: number

                      default=600 - Maximum size for a sentence.

                      +
                    • Optionaloptions: {
                          maxSize: number;
                          minSize: number;
                          splitOnHtmlTags: boolean;
                      } = {}
                        +
                      • +
                      +
                      • maxSize: number

                        default=600 - Maximum size for a sentence.

                      • minSize: number

                        default=20 - Minimum size for a sentence.

                      • splitOnHtmlTags: boolean

                        default=true - Split on HTML tags like P, DIV, UL, OL.

                  Returns string[]

                  An array of sentences.

                  -
                diff --git a/docs/functions/src_tokenize_stopwords.isWordCommonIgnored.html b/docs/functions/src_tokenize_stopwords.isWordCommonIgnored.html index dbaebda..a48a862 100644 --- a/docs/functions/src_tokenize_stopwords.isWordCommonIgnored.html +++ b/docs/functions/src_tokenize_stopwords.isWordCommonIgnored.html @@ -1,7 +1,7 @@ isWordCommonIgnored | ai-research-agent
                diff --git a/docs/functions/src_tokenize_text_to_chunks.splitTextSemanticChars.html b/docs/functions/src_tokenize_text_to_chunks.splitTextSemanticChars.html index bc2a0c4..2aa8885 100644 --- a/docs/functions/src_tokenize_text_to_chunks.splitTextSemanticChars.html +++ b/docs/functions/src_tokenize_text_to_chunks.splitTextSemanticChars.html @@ -28,7 +28,7 @@
                const text = "# Heading\n\nThis is a paragraph.\n\n- List item 1\n- List item 2\n\n";
                const chunks = splitTextSemanticChars(text);
                console.log(chunks);
                // Output: ['# Heading', 'This is a paragraph.', '- List item 1', '- List item 2']
                -
                diff --git a/docs/functions/src_tokenize_tokenize_topics.tokenizeTopics.html b/docs/functions/src_tokenize_tokenize_topics.tokenizeTopics.html index 0b8cc82..7ec2629 100644 --- a/docs/functions/src_tokenize_tokenize_topics.tokenizeTopics.html +++ b/docs/functions/src_tokenize_tokenize_topics.tokenizeTopics.html @@ -7,13 +7,16 @@ not just split into words and find frequency. Examples are "white house" or "state of the art" which should be searched as a phrase but would return different context if split into words. As Led Zeppelin famously put it: ♫ "'Cause you know sometimes words have two meanings."

                -

                Parameters

                • phrase: string
                • options: {
                      checkRootWords: number;
                      checkTypos: number;
                      ignoreStopWords: number;
                      phrasesModel: any;
                      typosModel: any;
                  } = {}
                  • checkRootWords: number

                    check for word's root stem

                    +

                    Parameters

                    • phrase: string
                    • Optionaloptions: {
                          checkRootWords: number;
                          checkTypos: number;
                          ignoreStopWords: number;
                          phrasesModel: any;
                          typosModel: any;
                      } = {}
                        +
                      • +
                      +
                      • checkRootWords: number

                        check for word's root stem

                      • checkTypos: number

                        check for typos

                      • ignoreStopWords: number

                        ignore 300+ overused words

                      • phrasesModel: any

                        remote model

                      • typosModel: any

                        remote model

                    Returns Token[]

                    ex. [[50, 0, "Albert Einstein"],...]

                    -
                diff --git a/docs/functions/src_tokenize_word_to_root_stem.convertWordToRootStem.html b/docs/functions/src_tokenize_word_to_root_stem.convertWordToRootStem.html index 673af18..85289f6 100644 --- a/docs/functions/src_tokenize_word_to_root_stem.convertWordToRootStem.html +++ b/docs/functions/src_tokenize_word_to_root_stem.convertWordToRootStem.html @@ -9,7 +9,7 @@
                var rootWord = convertWordToRootStem("running"); // returns "run"
                 
                -
                diff --git a/docs/functions/src_topic_distribution_topic_distribution.weighTopicDirichletDistribution.html b/docs/functions/src_topic_distribution_topic_distribution.weighTopicDirichletDistribution.html index 73ff380..d0d9faa 100644 --- a/docs/functions/src_topic_distribution_topic_distribution.weighTopicDirichletDistribution.html +++ b/docs/functions/src_topic_distribution_topic_distribution.weighTopicDirichletDistribution.html @@ -10,7 +10,7 @@ https://www.geeksforgeeks.org/latent-dirichlet-allocation/
                "Topic Models" https://www.youtube.com/watch?v=yK7nN3FcgUs

                Parameters

                • sentences: string[]

                  Array of input sentences.

                  -
                • options: {
                      alpha: number;
                      beta: number;
                      numberOfIterations: number;
                      numberOfTermsPerTopic: number;
                      topicCount: number;
                      valueBurnIn: number;
                      valueSampleLag: number;
                  } = {}

                  Configuration options for LDA.

                  +
                • Optionaloptions: {
                      alpha: number;
                      beta: number;
                      numberOfIterations: number;
                      numberOfTermsPerTopic: number;
                      topicCount: number;
                      valueBurnIn: number;
                      valueSampleLag: number;
                  } = {}

                  Configuration options for LDA.

                  • alpha: number

                    default=0.1 - Dirichlet prior on document-topic distributions.

                  • beta: number

                    default=0.01 - Dirichlet prior on topic-word distributions.

                  • numberOfIterations: number

                    default=1000 - Number of iterations for the LDA algorithm.

                    @@ -21,7 +21,7 @@

                Returns any[]

                • Array of topics, each containing term-probability pairs.
                -
                diff --git a/docs/functions/src_topics_ngrams.extractNounEdgeGrams.html b/docs/functions/src_topics_ngrams.extractNounEdgeGrams.html index bb675f0..b348724 100644 --- a/docs/functions/src_topics_ngrams.extractNounEdgeGrams.html +++ b/docs/functions/src_topics_ngrams.extractNounEdgeGrams.html @@ -18,7 +18,7 @@
                  let terms = [["The", 1], ["quick", 2], ["brown", 2], ["fox", 3], ["jumps", 4]];
                  let nGrams = {};
                  extractNounEdgeGrams(3, terms, 0, nGrams, 3, 1);
                  // nGrams might now contain: {3: {"brown fox jumps": [1]}}
                  -
                  diff --git a/docs/functions/src_topics_rank_sentences_keyphrases.rankSentencesCentralToKeyphrase.html b/docs/functions/src_topics_rank_sentences_keyphrases.rankSentencesCentralToKeyphrase.html index 4424113..8c559d0 100644 --- a/docs/functions/src_topics_rank_sentences_keyphrases.rankSentencesCentralToKeyphrase.html +++ b/docs/functions/src_topics_rank_sentences_keyphrases.rankSentencesCentralToKeyphrase.html @@ -13,7 +13,7 @@ https://dl.acm.org/doi/10.1145/3321408.3326659 https://doi.org/10.1145/3321408.3326659

                  Parameters

                  • sentencesWithKeyphrases: any[]

                    Array of objects, each containing {text, keyphrases}

                  • options: {} = {}

                    Returns any[]

                    Updated array with added weights: [{text, keyphrases, weight}]

                    -
                    diff --git a/docs/functions/src_topics_seektopic_keyphrases.extractSEEKTOPIC.html b/docs/functions/src_topics_seektopic_keyphrases.extractSEEKTOPIC.html index 5261290..d72b24f 100644 --- a/docs/functions/src_topics_seektopic_keyphrases.extractSEEKTOPIC.html +++ b/docs/functions/src_topics_seektopic_keyphrases.extractSEEKTOPIC.html @@ -5,7 +5,7 @@ to find which sentences centralize and tie together keyphrase concepts referred to most by other sentences. Based on the & PageRank algorithms, it randomly surfs nodes to find probability of being at that node, thus ranking influence.

                    Parameters

                    • docText: string

                      input text to analyze

                      -
                    • options: {
                          heavyWeightQuery: string;
                          limitTopKeyphrases: number;
                          limitTopSentences: number;
                          maxWords: number;
                          minKeyPhraseLength: number;
                          minWordLength: number;
                          minWords: number;
                          phrasesModel: any;
                          topKeyphrasesPercent: number;
                      } = {}
                      • heavyWeightQuery: string

                        query to give heavy weight to

                        +
                      • Optionaloptions: {
                            heavyWeightQuery: string;
                            limitTopKeyphrases: number;
                            limitTopSentences: number;
                            maxWords: number;
                            minKeyPhraseLength: number;
                            minWordLength: number;
                            minWords: number;
                            phrasesModel: any;
                            topKeyphrasesPercent: number;
                        } = {}
                        • heavyWeightQuery: string

                          query to give heavy weight to

                        • limitTopKeyphrases: number

                          default=10 - maximum number of top keyphrases to return

                        • limitTopSentences: number

                          default=5 - maximum number of top sentences to return

                        • maxWords: number

                          default=5 - maximum words in a keyphrase

                          @@ -46,7 +46,7 @@
                          extractSEEKTOPIC(testDoc, { phrasesModel, heavyWeightQuery: "self attention", limitTopSentences: 10,
                           
                          -
                    diff --git a/docs/functions/src_trafilatura_extractor_baseline.baseline.html b/docs/functions/src_trafilatura_extractor_baseline.baseline.html new file mode 100644 index 0000000..910ed7d --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_baseline.baseline.html @@ -0,0 +1,4 @@ +baseline | ai-research-agent
                    • Parameters

                      • filecontent: any

                      Returns any[]

                    diff --git a/docs/functions/src_trafilatura_extractor_baseline.basicCleaning.html b/docs/functions/src_trafilatura_extractor_baseline.basicCleaning.html new file mode 100644 index 0000000..6555149 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_baseline.basicCleaning.html @@ -0,0 +1,4 @@ +basicCleaning | ai-research-agent
                    • Parameters

                      • tree: any

                      Returns any

                    diff --git a/docs/functions/src_trafilatura_extractor_baseline.html2txt.html b/docs/functions/src_trafilatura_extractor_baseline.html2txt.html new file mode 100644 index 0000000..fc88606 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_baseline.html2txt.html @@ -0,0 +1,4 @@ +html2txt | ai-research-agent
                    • Parameters

                      • content: any
                      • clean: boolean = true

                      Returns any

                    diff --git a/docs/functions/src_trafilatura_extractor_baseline.loadHtml.html b/docs/functions/src_trafilatura_extractor_baseline.loadHtml.html new file mode 100644 index 0000000..5c259a5 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_baseline.loadHtml.html @@ -0,0 +1,4 @@ +loadHtml | ai-research-agent
                    • Parameters

                      • content: any

                      Returns any

                    diff --git a/docs/functions/src_trafilatura_extractor_baseline.trim.html b/docs/functions/src_trafilatura_extractor_baseline.trim.html new file mode 100644 index 0000000..7949024 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_baseline.trim.html @@ -0,0 +1,4 @@ +trim | ai-research-agent
                    • Parameters

                      • text: any

                      Returns any

                    diff --git a/docs/variables/src_extract_content_xpaths.COMMENTS_XPATH.html b/docs/functions/src_trafilatura_extractor_core.bareExtraction.html similarity index 75% rename from docs/variables/src_extract_content_xpaths.COMMENTS_XPATH.html rename to docs/functions/src_trafilatura_extractor_core.bareExtraction.html index 4dadf10..fa6b1cc 100644 --- a/docs/variables/src_extract_content_xpaths.COMMENTS_XPATH.html +++ b/docs/functions/src_trafilatura_extractor_core.bareExtraction.html @@ -1,4 +1,4 @@ -COMMENTS_XPATH | ai-research-agent
                    COMMENTS_XPATH: string[] = ...
                    • Parameters

                      • filecontent: any
                      • options: any

                      Returns Document

                    diff --git a/docs/functions/src_trafilatura_extractor_core.extract.html b/docs/functions/src_trafilatura_extractor_core.extract.html new file mode 100644 index 0000000..455091a --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_core.extract.html @@ -0,0 +1,4 @@ +extract | ai-research-agent
                    • Parameters

                      • htmlOrDom: any
                      • options: {} = {}

                        Returns any

                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.cleanQuery.html b/docs/functions/src_trafilatura_extractor_courlan_clean.cleanQuery.html new file mode 100644 index 0000000..2d61be5 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.cleanQuery.html @@ -0,0 +1,11 @@ +cleanQuery | ai-research-agent
                      • Strip unwanted query elements

                        +

                        Parameters

                        • querystring: string

                          The query string to clean

                          +
                        • Optionalstrict: boolean = false

                          Whether to use strict cleaning

                          +
                        • Optionallanguage: string = null

                          The language to use for cleaning

                          +

                        Returns string

                          +
                        • The cleaned query string
                        • +
                        +
                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.cleanUrl.html b/docs/functions/src_trafilatura_extractor_courlan_clean.cleanUrl.html new file mode 100644 index 0000000..3935c18 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.cleanUrl.html @@ -0,0 +1,10 @@ +cleanUrl | ai-research-agent
                      • Helper function: chained scrubbing and normalization

                        +

                        Parameters

                        • url: string

                          The URL to clean

                          +
                        • Optionallanguage: string = null

                          The language to use for cleaning

                          +

                        Returns string

                          +
                        • The cleaned URL or null if invalid
                        • +
                        +
                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.decodePunycode.html b/docs/functions/src_trafilatura_extractor_courlan_clean.decodePunycode.html new file mode 100644 index 0000000..032cfaf --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.decodePunycode.html @@ -0,0 +1,9 @@ +decodePunycode | ai-research-agent
                      • Probe for punycode in lower-cased hostname and try to decode it

                        +

                        Parameters

                        • string: string

                          The string to decode

                          +

                        Returns string

                          +
                        • The decoded string
                        • +
                        +
                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.normalizeFragment.html b/docs/functions/src_trafilatura_extractor_courlan_clean.normalizeFragment.html new file mode 100644 index 0000000..6430bd0 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.normalizeFragment.html @@ -0,0 +1,10 @@ +normalizeFragment | ai-research-agent
                      • Look for trackers in URL fragments using query analysis, normalize the output

                        +

                        Parameters

                        • fragment: string

                          The fragment to normalize

                          +
                        • Optionallanguage: string = null

                          The language to use for normalization

                          +

                        Returns string

                          +
                        • The normalized fragment
                        • +
                        +
                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.normalizePart.html b/docs/functions/src_trafilatura_extractor_courlan_clean.normalizePart.html new file mode 100644 index 0000000..7cae3dd --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.normalizePart.html @@ -0,0 +1,9 @@ +normalizePart | ai-research-agent
                      • Normalize URLs parts (specifically path and fragment) while accounting for certain characters

                        +

                        Parameters

                        • urlPart: string

                          The URL part to normalize

                          +

                        Returns string

                          +
                        • The normalized URL part
                        • +
                        +
                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.normalizeUrl.html b/docs/functions/src_trafilatura_extractor_courlan_clean.normalizeUrl.html new file mode 100644 index 0000000..909f49c --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.normalizeUrl.html @@ -0,0 +1,12 @@ +normalizeUrl | ai-research-agent
                      • Takes a URL string or a parsed URL and returns a normalized URL string

                        +

                        Parameters

                        • parsedUrl: string | URL

                          The URL to normalize

                          +
                        • Optionalstrict: boolean = false

                          Whether to use strict normalization

                          +
                        • Optionallanguage: string = null

                          The language to use for normalization

                          +
                        • OptionaltrailingSlash: boolean = true

                          Whether to keep trailing slashes

                          +

                        Returns string

                          +
                        • The normalized URL
                        • +
                        +
                      diff --git a/docs/functions/src_trafilatura_extractor_courlan_clean.scrubUrl.html b/docs/functions/src_trafilatura_extractor_courlan_clean.scrubUrl.html new file mode 100644 index 0000000..a0526b6 --- /dev/null +++ b/docs/functions/src_trafilatura_extractor_courlan_clean.scrubUrl.html @@ -0,0 +1,9 @@ +scrubUrl | ai-research-agent
                      • Strip unnecessary parts and make sure only one URL is considered

                        +

                        Parameters

                        • url: string

                          The URL to scrub

                          +

                        Returns string

                          +
                        • The scrubbed URL
                        • +
                        +
                      diff --git a/docs/functions/src_extract_content_courlan_core.checkUrl.html b/docs/functions/src_trafilatura_extractor_courlan_core.checkUrl.html similarity index 58% rename from docs/functions/src_extract_content_courlan_core.checkUrl.html rename to docs/functions/src_trafilatura_extractor_courlan_core.checkUrl.html index 1d1b98b..031690c 100644 --- a/docs/functions/src_extract_content_courlan_core.checkUrl.html +++ b/docs/functions/src_trafilatura_extractor_courlan_core.checkUrl.html @@ -1,4 +1,4 @@ -checkUrl | ai-research-agent