BibexPy 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- bibex_core/MergeDB.py +1189 -0
- bibex_core/__init__.py +13 -0
- bibex_core/modules/__init__.py +35 -0
- bibex_core/modules/api_utils.py +1172 -0
- bibex_core/modules/c1_utils.py +423 -0
- bibex_core/modules/file_utils.py +71 -0
- bibex_core/modules/ml_utils.py +332 -0
- bibex_core/modules/post_process.py +50 -0
- bibex_core/modules/stats_utils.py +216 -0
- bibex_core/scp2xlsx.py +235 -0
- bibex_core/wos2xlsx.py +159 -0
- bibex_core/xlsx2vos.py +185 -0
- bibexpy/__init__.py +9 -0
- bibexpy/__main__.py +6 -0
- bibexpy/_server/__init__.py +1 -0
- bibexpy/_server/config.py +92 -0
- bibexpy/_server/jobs/__init__.py +3 -0
- bibexpy/_server/jobs/runner.py +301 -0
- bibexpy/_server/main.py +211 -0
- bibexpy/_server/models/__init__.py +0 -0
- bibexpy/_server/models/project.py +25 -0
- bibexpy/_server/routers/__init__.py +0 -0
- bibexpy/_server/routers/audit.py +65 -0
- bibexpy/_server/routers/convert.py +101 -0
- bibexpy/_server/routers/disambiguate.py +177 -0
- bibexpy/_server/routers/downloads.py +26 -0
- bibexpy/_server/routers/enrich.py +42 -0
- bibexpy/_server/routers/export.py +116 -0
- bibexpy/_server/routers/export_folder.py +97 -0
- bibexpy/_server/routers/filter.py +131 -0
- bibexpy/_server/routers/jobs.py +72 -0
- bibexpy/_server/routers/merge.py +437 -0
- bibexpy/_server/routers/prepare.py +241 -0
- bibexpy/_server/routers/projects.py +49 -0
- bibexpy/_server/routers/quality.py +288 -0
- bibexpy/_server/routers/records.py +204 -0
- bibexpy/_server/routers/report.py +111 -0
- bibexpy/_server/routers/settings.py +383 -0
- bibexpy/_server/routers/system.py +209 -0
- bibexpy/_server/routers/tools.py +257 -0
- bibexpy/_server/routers/upload.py +110 -0
- bibexpy/_server/services/__init__.py +0 -0
- bibexpy/_server/services/analyses.py +364 -0
- bibexpy/_server/services/audit.py +340 -0
- bibexpy/_server/services/bibex_adapter.py +47 -0
- bibexpy/_server/services/bibtex_writer.py +104 -0
- bibexpy/_server/services/converter.py +205 -0
- bibexpy/_server/services/disambiguation/__init__.py +19 -0
- bibexpy/_server/services/disambiguation/blocking.py +581 -0
- bibexpy/_server/services/disambiguation/cache.py +47 -0
- bibexpy/_server/services/disambiguation/deepseek_client.py +203 -0
- bibexpy/_server/services/disambiguation/orcid.py +261 -0
- bibexpy/_server/services/disambiguation/pipeline.py +985 -0
- bibexpy/_server/services/disambiguation/similarity.py +91 -0
- bibexpy/_server/services/enricher.py +338 -0
- bibexpy/_server/services/exporter.py +112 -0
- bibexpy/_server/services/filter_engine.py +300 -0
- bibexpy/_server/services/merger.py +202 -0
- bibexpy/_server/services/methodology.py +102 -0
- bibexpy/_server/services/report_export.py +300 -0
- bibexpy/_server/services/ris_writer.py +62 -0
- bibexpy/_server/services/smart_merger.py +967 -0
- bibexpy/_server/services/storage.py +165 -0
- bibexpy/_web/404/index.html +1 -0
- bibexpy/_web/404.html +1 -0
- bibexpy/_web/_next/static/chunks/117-7ad5186126fa076d.js +2 -0
- bibexpy/_web/_next/static/chunks/156-75beffb8ae92a7f3.js +1 -0
- bibexpy/_web/_next/static/chunks/169-301c04fcec22686f.js +4 -0
- bibexpy/_web/_next/static/chunks/2-ecc1c36a5632ac61.js +1 -0
- bibexpy/_web/_next/static/chunks/244-be343e0f8aa00fb5.js +1 -0
- bibexpy/_web/_next/static/chunks/367-b7457c2b95f6932b.js +1 -0
- bibexpy/_web/_next/static/chunks/382-9cd163eed632e241.js +1 -0
- bibexpy/_web/_next/static/chunks/392-afa8bfa4c1a9893d.js +1 -0
- bibexpy/_web/_next/static/chunks/507-63607ded9f83c1aa.js +1 -0
- bibexpy/_web/_next/static/chunks/624-cae565632f47217d.js +1 -0
- bibexpy/_web/_next/static/chunks/739-a00c6b9c0f11813e.js +1 -0
- bibexpy/_web/_next/static/chunks/862-8e1bd5f93c082c02.js +1 -0
- bibexpy/_web/_next/static/chunks/app/_not-found/page-873ba59b5eb7c342.js +1 -0
- bibexpy/_web/_next/static/chunks/app/layout-0d5fc68ac8971a04.js +1 -0
- bibexpy/_web/_next/static/chunks/app/page-cf2bea5edc74459a.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/convert/page-ab6dd645ae113b64.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/disambiguate/page-dd98482cc47344e9.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/enrich/page-4727e431468514e9.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/export/page-f9005d164bb22cb0.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/layout-07755fda55b3ae1f.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/merge/page-45b95318ea7beccf.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/records/page-bfad80457da9eb0b.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/report/page-f05767e74158e995.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/[id]/upload/page-8df78ca9cdecbcb8.js +1 -0
- bibexpy/_web/_next/static/chunks/app/projects/page-99960711ac6a13e9.js +1 -0
- bibexpy/_web/_next/static/chunks/app/settings/page-002df809d6c5a227.js +1 -0
- bibexpy/_web/_next/static/chunks/app/tools/page-27eee1c6a590859f.js +1 -0
- bibexpy/_web/_next/static/chunks/fd9d1056-f2718be92181f426.js +1 -0
- bibexpy/_web/_next/static/chunks/framework-f66176bb897dc684.js +1 -0
- bibexpy/_web/_next/static/chunks/main-app-d138a6e2f8c847f6.js +1 -0
- bibexpy/_web/_next/static/chunks/main-c4b9ddbf514503ef.js +1 -0
- bibexpy/_web/_next/static/chunks/pages/_app-72b849fbd24ac258.js +1 -0
- bibexpy/_web/_next/static/chunks/pages/_error-7ba65e1336b92748.js +1 -0
- bibexpy/_web/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- bibexpy/_web/_next/static/chunks/webpack-c81f7fd28659d64f.js +1 -0
- bibexpy/_web/_next/static/css/1c4638f3e39cf127.css +3 -0
- bibexpy/_web/_next/static/ypx2IQAkZiSaFiKWnzZGB/_buildManifest.js +1 -0
- bibexpy/_web/_next/static/ypx2IQAkZiSaFiKWnzZGB/_ssgManifest.js +1 -0
- bibexpy/_web/images/PROMPTS.md +83 -0
- bibexpy/_web/images/about-illustration.png +0 -0
- bibexpy/_web/images/authors/alperen-sahin.jpg +0 -0
- bibexpy/_web/images/authors/burak-can-kara.jpg +0 -0
- bibexpy/_web/images/authors/taskin-dirsehan.jpg +0 -0
- bibexpy/_web/images/bibexpy-logo-full.png +0 -0
- bibexpy/_web/images/bibexpy-logo-header.png +0 -0
- bibexpy/_web/images/bibexpy-logo-in.png +0 -0
- bibexpy/_web/images/bibexpy-logo.webp +0 -0
- bibexpy/_web/images/hero-illustration.png +0 -0
- bibexpy/_web/images/loader.gif +0 -0
- bibexpy/_web/images/workflow-diagram.png +0 -0
- bibexpy/_web/index.html +1 -0
- bibexpy/_web/index.txt +11 -0
- bibexpy/_web/projects/_/convert/index.html +1 -0
- bibexpy/_web/projects/_/convert/index.txt +12 -0
- bibexpy/_web/projects/_/disambiguate/index.html +1 -0
- bibexpy/_web/projects/_/disambiguate/index.txt +12 -0
- bibexpy/_web/projects/_/enrich/index.html +1 -0
- bibexpy/_web/projects/_/enrich/index.txt +12 -0
- bibexpy/_web/projects/_/export/index.html +1 -0
- bibexpy/_web/projects/_/export/index.txt +12 -0
- bibexpy/_web/projects/_/merge/index.html +1 -0
- bibexpy/_web/projects/_/merge/index.txt +12 -0
- bibexpy/_web/projects/_/records/index.html +1 -0
- bibexpy/_web/projects/_/records/index.txt +12 -0
- bibexpy/_web/projects/_/report/index.html +1 -0
- bibexpy/_web/projects/_/report/index.txt +12 -0
- bibexpy/_web/projects/_/upload/index.html +1 -0
- bibexpy/_web/projects/_/upload/index.txt +12 -0
- bibexpy/_web/projects/index.html +1 -0
- bibexpy/_web/projects/index.txt +11 -0
- bibexpy/_web/settings/index.html +1 -0
- bibexpy/_web/settings/index.txt +11 -0
- bibexpy/_web/tools/README.md +65 -0
- bibexpy/_web/tools/bibexcel.svg +6 -0
- bibexpy/_web/tools/bibliometrix.png +0 -0
- bibexpy/_web/tools/biblioshiny.svg +12 -0
- bibexpy/_web/tools/citavi.svg +6 -0
- bibexpy/_web/tools/citespace.svg +7 -0
- bibexpy/_web/tools/citnetexplorer.svg +8 -0
- bibexpy/_web/tools/endnote.svg +6 -0
- bibexpy/_web/tools/excel.svg +1 -0
- bibexpy/_web/tools/gephi.svg +66 -0
- bibexpy/_web/tools/histcite.svg +7 -0
- bibexpy/_web/tools/index.html +1 -0
- bibexpy/_web/tools/index.txt +11 -0
- bibexpy/_web/tools/jabref.svg +122 -0
- bibexpy/_web/tools/latex.svg +1 -0
- bibexpy/_web/tools/mendeley.svg +1 -0
- bibexpy/_web/tools/openrefine.svg +15 -0
- bibexpy/_web/tools/overleaf.svg +1 -0
- bibexpy/_web/tools/papers.svg +7 -0
- bibexpy/_web/tools/powerbi.svg +1 -0
- bibexpy/_web/tools/python.svg +1 -0
- bibexpy/_web/tools/r.svg +1 -0
- bibexpy/_web/tools/refworks.svg +5 -0
- bibexpy/_web/tools/scite.svg +5 -0
- bibexpy/_web/tools/tableau.svg +1 -0
- bibexpy/_web/tools/vosviewer.png +0 -0
- bibexpy/_web/tools/zotero.svg +1 -0
- bibexpy/cli.py +242 -0
- bibexpy-2.0.0.dist-info/METADATA +105 -0
- bibexpy-2.0.0.dist-info/RECORD +171 -0
- bibexpy-2.0.0.dist-info/WHEEL +5 -0
- bibexpy-2.0.0.dist-info/entry_points.txt +2 -0
- bibexpy-2.0.0.dist-info/licenses/LICENSE +674 -0
- bibexpy-2.0.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
6
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
7
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
8
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
9
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
10
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
11
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
12
|
+
version="1.1"
|
|
13
|
+
id="Ebene_1"
|
|
14
|
+
x="0px"
|
|
15
|
+
y="0px"
|
|
16
|
+
width="205"
|
|
17
|
+
height="205"
|
|
18
|
+
viewBox="0 0 205.00001 205.00001"
|
|
19
|
+
enable-background="new 0 0 350.024 350.024"
|
|
20
|
+
xml:space="preserve"
|
|
21
|
+
inkscape:version="0.48.5 r10040"
|
|
22
|
+
sodipodi:docname="without-bg.svg"
|
|
23
|
+
inkscape:export-filename="D:\forschung\eclipse-projects\jabref-repos\jabref-admin\files-logo-contest\version2\exported bitmaps\JabRef-icon-32.png"
|
|
24
|
+
inkscape:export-xdpi="14.04878"
|
|
25
|
+
inkscape:export-ydpi="14.04878"><metadata
|
|
26
|
+
id="metadata3041"><rdf:RDF><cc:Work
|
|
27
|
+
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
28
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
|
29
|
+
id="defs3039">
|
|
30
|
+
<defs
|
|
31
|
+
id="defs3017">
|
|
32
|
+
<rect
|
|
33
|
+
height="350.02399"
|
|
34
|
+
width="350.02399"
|
|
35
|
+
id="SVGID_1_"
|
|
36
|
+
x="0"
|
|
37
|
+
y="0" />
|
|
38
|
+
</defs>
|
|
39
|
+
<clipPath
|
|
40
|
+
id="SVGID_2_">
|
|
41
|
+
<use
|
|
42
|
+
id="use3021"
|
|
43
|
+
overflow="visible"
|
|
44
|
+
xlink:href="#SVGID_1_"
|
|
45
|
+
style="overflow:visible"
|
|
46
|
+
x="0"
|
|
47
|
+
y="0"
|
|
48
|
+
width="350.02399"
|
|
49
|
+
height="350.02399" />
|
|
50
|
+
</clipPath>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
</defs><sodipodi:namedview
|
|
59
|
+
pagecolor="#ffffff"
|
|
60
|
+
bordercolor="#666666"
|
|
61
|
+
borderopacity="1"
|
|
62
|
+
objecttolerance="10"
|
|
63
|
+
gridtolerance="10"
|
|
64
|
+
guidetolerance="10"
|
|
65
|
+
inkscape:pageopacity="0"
|
|
66
|
+
inkscape:pageshadow="2"
|
|
67
|
+
inkscape:window-width="1536"
|
|
68
|
+
inkscape:window-height="801"
|
|
69
|
+
id="namedview3037"
|
|
70
|
+
showgrid="false"
|
|
71
|
+
inkscape:zoom="2.696958"
|
|
72
|
+
inkscape:cx="28.023199"
|
|
73
|
+
inkscape:cy="104.45913"
|
|
74
|
+
inkscape:window-x="-8"
|
|
75
|
+
inkscape:window-y="-8"
|
|
76
|
+
inkscape:window-maximized="1"
|
|
77
|
+
inkscape:current-layer="Ebene_1"
|
|
78
|
+
fit-margin-top="0"
|
|
79
|
+
fit-margin-left="0"
|
|
80
|
+
fit-margin-right="0"
|
|
81
|
+
fit-margin-bottom="0" />
|
|
82
|
+
<g
|
|
83
|
+
id="g4308"
|
|
84
|
+
transform="translate(4.464505,-1.0189586)"><path
|
|
85
|
+
transform="translate(-76.976,-71.492991)"
|
|
86
|
+
clip-path="url(#SVGID_2_)"
|
|
87
|
+
d="M 169.701,159.59 C 165.76,106.354 90.925,87.102 90.754,88.131 c -0.138,6.655 -0.277,13.309 -0.415,19.964 17.786,3.616 61.666,20.094 79.362,51.495"
|
|
88
|
+
id="path3025"
|
|
89
|
+
inkscape:connector-curvature="0"
|
|
90
|
+
style="fill:#4f5f8f;fill-opacity:1" /><path
|
|
91
|
+
transform="translate(-76.976,-71.492991)"
|
|
92
|
+
clip-path="url(#SVGID_2_)"
|
|
93
|
+
d="M 168.724,133.743 C 165.32,91.685 107.608,72.901 107.501,73.547 c -0.041,3.517 -0.081,7.035 -0.121,10.553 18.138,7.541 47.675,24.698 61.344,49.643"
|
|
94
|
+
id="path3027"
|
|
95
|
+
inkscape:connector-curvature="0"
|
|
96
|
+
style="fill:#4f5f8f;fill-opacity:1" /><path
|
|
97
|
+
transform="translate(-76.976,-71.492991)"
|
|
98
|
+
clip-path="url(#SVGID_2_)"
|
|
99
|
+
d="m 139.626,137.75 c -25.869,-17.587 -58.458,-22.145 -58.582,-21.399 -0.316,12.413 -0.631,24.826 -0.946,37.239 37.889,2.181 40.156,25.749 37.868,40.824 l -39.112,12.556 -1.878,69.523 68.665,-26.614 c 8.02,-3.279 16.04,-6.436 24.061,-9.326 v -47.922 c 0,-21.406 -10.904,-41.845 -30.076,-54.881"
|
|
100
|
+
id="path3029"
|
|
101
|
+
inkscape:connector-curvature="0"
|
|
102
|
+
style="fill:#4f5f8f;fill-opacity:1" /><path
|
|
103
|
+
transform="translate(-76.976,-71.492991)"
|
|
104
|
+
clip-path="url(#SVGID_2_)"
|
|
105
|
+
d="m 180.322,159.59 c 3.941,-53.236 78.776,-72.488 78.947,-71.459 0.138,6.655 0.277,13.309 0.415,19.964 -17.786,3.616 -61.665,20.094 -79.362,51.495"
|
|
106
|
+
id="path3031"
|
|
107
|
+
inkscape:connector-curvature="0"
|
|
108
|
+
style="fill:#4f5f8f;fill-opacity:1" /><path
|
|
109
|
+
transform="translate(-76.976,-71.492991)"
|
|
110
|
+
clip-path="url(#SVGID_2_)"
|
|
111
|
+
d="m 181.3,133.743 c 3.404,-42.058 61.116,-60.842 61.223,-60.196 0.041,3.517 0.081,7.035 0.121,10.553 -18.138,7.541 -47.675,24.698 -61.344,49.643"
|
|
112
|
+
id="path3033"
|
|
113
|
+
inkscape:connector-curvature="0"
|
|
114
|
+
style="fill:#4f5f8f;fill-opacity:1" /><path
|
|
115
|
+
transform="translate(-76.976,-71.492991)"
|
|
116
|
+
clip-path="url(#SVGID_2_)"
|
|
117
|
+
d="m 210.397,137.75 c 25.869,-17.587 58.458,-22.145 58.582,-21.399 0.316,12.413 0.632,24.826 0.946,37.239 -37.889,2.181 -40.156,25.749 -37.868,40.824 l 39.112,12.556 1.878,69.523 -68.665,-26.614 c -8.02,-3.279 -16.04,-6.436 -24.061,-9.326 v -47.922 c 0.001,-21.406 10.905,-41.845 30.076,-54.881"
|
|
118
|
+
id="path3035"
|
|
119
|
+
inkscape:connector-curvature="0"
|
|
120
|
+
style="fill:#4f5f8f;fill-opacity:1" /></g>
|
|
121
|
+
</svg>
|
|
122
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="#008080" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>LaTeX</title><path d="M2.176 2.814c.233.42.476.78.73 1.09.247-.013 1.132.456 1.312.523.508.282 1.063.63 1.567.966.505.337.96.662 1.272.9.156.12.278.218.352.286a.483.483 0 01.078.082.08.08 0 01.01.021.06.06 0 01-.004.047.057.057 0 01-.04.03.077.077 0 01-.028 0c-.057 0-.203-.163-.497-.415a23.474 23.474 0 00-2.759-1.827c-.504-.28-.956-.542-1.264-.613a2.322 2.322 0 00-.36-.025 2.706 2.706 0 00-.788.133c.494.414.91.716 1.28.949-.57-.182-1.182-.21-1.902.133.526.329.967.567 1.354.745 1.103.156 2.258.696 3.224 1.309.483.307.904.615 1.219.867.157.125.29.237.39.328.098.091.174.154.197.21.03.073-.019.104-.084.058-.032-.022-.088-.102-.184-.191a7.35 7.35 0 00-.384-.327c-.312-.25-.729-.552-1.209-.857-.893-.562-2.232-1.013-3.173-1.397-.602-.11-1.225-.06-1.906.39.449.2.837.349 1.182.463.812 0 1.892.365 2.935.922 1.042.556 2.04 1.214 2.523 1.774.066.077-.016.126-.074.07-.52-.495-1.463-1.204-2.498-1.756-.639-.337-2.153-1.01-2.886-1.01l.004.002c-.567.02-1.13.195-1.679.716.477.118.885.196 1.244.249-.44.088-.87.3-1.289.722.324.07.616.122.882.162-.328.159-.639.404-.923.78.373.03.703.042 1 .044-.36.166-.696.43-.996.85.533.027.98.025 1.364.003-.422.172-.812.464-1.145.968.662.01 1.188-.022 1.628-.076l-.006.002c.99-.073 2.297.127 2.962.847.052.057-.024.118-.072.074-.648-.58-1.493-.827-2.89-.921h-.002c-.543.149-1.046.446-1.46 1.074.536.008.982-.013 1.366-.05-.469.257-.873.644-1.139 1.306.483-.092.888-.19 1.237-.292-.363.265-.668.636-.873 1.194.324-.072.612-.146.871-.221a2.519 2.519 0 00-.513 1.095c.352-.13.655-.254.926-.377-.257.3-.453.681-.55 1.19.495-.199.899-.388 1.238-.568-.31.333-.543.76-.635 1.356a11.816 11.816 0 001.442-.744c-.433.362-.764.843-.879 1.587.788-.348 1.339-.663 1.767-.955-.184.372-.282.806-.235 1.348.762-.584 1.243-1.056 1.602-1.473-.024.269-.003.56.077.884.546-.939 1.089-1.212 1.65-1.526-.895.451-.762.79-.762 1.184.683-.72 1.635-1.482 1.927-1.96-.39.585-.547 1.14-.65 1.63-1.993 1.054-3.207 1.329-4.568 1.75.528.194 1.093.383.859.652l-.624.622c.399-.124.805-.3 1.158-.059-.035.327-.447.492-.8.683.621-.224.756-.172.92-.12.081.393-.203.603-.388.862 1.565-1.19 3.606-2.13 5.044-2.522 2.022-.681 4.63-1.389 5.339-3.115l.712-2.847-.004.004c-.111-.034-.246-.063-.35-.133a.651.651 0 01-.235-.297c-.252.065-.44.03-.56-.088-.117-.117-.167-.296-.203-.491-.203.041-.362.016-.467-.077-.116-.101-.17-.26-.198-.444l-.008-.039.037-.015a.842.842 0 00.302-.194.257.257 0 00.07-.225l-.006-.037.03-.016c.163-.093.345-.169.428-.28a.274.274 0 00.053-.21.88.88 0 00-.155-.357l-.027-.04.04-.027c.118-.09.244-.179.308-.26.032-.04.048-.076.047-.11 0-.033-.015-.07-.064-.117l-.098-.094.135.006c.213.01.395-.007.538-.053a.504.504 0 00.274-.197c-.007-.033-.02-.063-.02-.098a.484.484 0 01.967 0c0 .044-.015.084-.026.125.177.014.347.01.507-.06l.002.001.035-.013c.236-.085.334.045.72-.456-1.69-2.19-4.157-.635-4.977 1.622-.21.576-1.405.578-1.751 0-1.37-2.95-5.53-6.068-9.07-7.218zm.86 2.145c.906.293 1.913.782 2.77 1.328.43.273.813.543 1.114.779.301.236.566.473.62.575.054.102 0 .14-.082.06-.081-.078-.303-.32-.6-.553-.298-.234-.68-.505-1.106-.777-.775-.49-1.982-.958-2.716-1.412zm-1.7 2.7c1.116.014 2.35.447 3.434.997.541.275 1.023.567 1.395.83.372.263.672.524.734.657.061.134-.02.13-.087.055a4.401 4.401 0 00-.704-.626 11.47 11.47 0 00-1.385-.826C3.76 8.264 2.439 7.82 1.336 7.66zm14.916.772a.381.381 0 100 .762.381.381 0 000-.762zM1.7 8.478c.822.072 1.72.368 2.534.75 1.086.509 2.035 1.158 2.434 1.667.035.045-.014.131-.08.062-.428-.44-1.322-1.131-2.397-1.635-.913-.421-2.282-.87-3.262-.78.251-.03.497-.088.771-.064zm16.339.01c-.366.475-.53.423-.703.464.094.43.35.586.585.77l-.06.012c2.315-.447 4.186-.286 6.139-.236l-5.961-1.01zm-.178 1.246h-.002l-.004.016.006-.016zm-.625-.757c-.183.074-.373.076-.563.059a.477.477 0 01-.42.26.483.483 0 01-.435-.278.609.609 0 01-.274.188c-.139.045-.308.057-.493.055.02.035.054.068.055.104a.273.273 0 01-.069.174c-.073.092-.189.17-.295.248.087.141.137.26.149.362a.39.39 0 01-.07.284c-.106.14-.288.21-.439.293a.374.374 0 01-.09.268.89.89 0 01-.297.198c.027.156.074.283.154.354.086.076.211.103.425.047l.055-.014.01.055c.033.207.088.385.187.483.1.099.244.135.503.055l.049-.015.016.048c.05.142.12.223.209.282.087.06.247.112.358.147.798-.869 1.525-1.772 1.884-2.86-.225-.177-.506-.338-.609-.797zm-16.23.386c1.165-.08 2.283.196 3.202.626.92.43 1.658.939 1.974 1.307.075.087-.019.12-.072.072a8.187 8.187 0 00-1.947-1.29c-.904-.414-2.193-.644-3.157-.715zm.864.802c.61.02 1.24.155 1.806.352.756.262 1.421.614 1.747.98.045.05-.007.127-.074.069-.349-.304-.961-.693-1.706-.951-.574-.195-1.613-.369-2.268-.397.197-.022.292-.06.495-.053zm1.05 1.788c.423.034.886.133 1.341.407.043.026.049.136-.049.09-.856-.402-1.326-.49-2.457-.31.386-.128.74-.221 1.164-.187zm-.04.788c.4-.035.784-.002 1.297.204.044.018.08.126-.033.094-.857-.243-1.167-.328-2.287.104.28-.229.622-.366 1.023-.402zm1.285.687c.317-.023.635-.026.934.006.052.006.055.105-.006.102a7.87 7.87 0 00-1.837.115c-.243.046-.423.043-1.405.458.287-.233.794-.452 1.385-.56a8.91 8.91 0 01.93-.12zm1.28.49c.099.003.062.104.006.103-.728-.01-1.304.132-1.875.295a9.78 9.78 0 00-1.318.525c.283-.23.713-.457 1.291-.622.579-.166 1.248-.326 1.896-.302zm.528.398c.036-.005.105.084.018.1-.73.137-1.244.267-1.794.454-.216.074-.58.207-1.243.587.26-.269.656-.492 1.213-.68.558-.19 1.196-.37 1.806-.46zm.311.507c.075-.012.097.087.02.102-1.217.241-1.76.556-2.54 1.144.504-.523 1.297-1.051 2.52-1.246zm.595.448c.087-.013.11.087.021.1-.872.13-1.477.553-2.255 1.33.295-.493 1.004-1.24 2.234-1.43zm.372.39c.046-.006.114.073.023.1a2.634 2.634 0 00-.669.3c-.182.118-.3.2-.597.507.111-.245.296-.434.542-.59.247-.157.509-.293.7-.317z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="#9D1620" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mendeley</title><path d="M12.0037 9.1684h.019a2.355 2.355 0 011.5038 4.1655 1.8076 1.8076 0 01-.8561.452 2.348 2.348 0 01-.6487.0923h-.019c-.2246 0-.4421-.033-.6487-.0922a1.8126 1.8126 0 01-.8561-.4521 2.346 2.346 0 01-.8511-1.8106 2.358 2.358 0 012.3569-2.355m-9.9731 9.474c1.2652.1583 2.388-.762 2.5073-2.0573a2.4442 2.4442 0 00-.2136-1.236c-1.7724-3.8889 6.9726-3.978 5.4949-.3078l-.01.016c-.6988 1.1178-.3198 2.5695.841 3.2402.4272.2486.9003.3508 1.3625.3308.4622.02.9354-.0822 1.3624-.3308 1.161-.6717 1.54-2.1224.8412-3.2402l-.01-.016c-1.4778-3.6703 7.2682-3.581 5.4938.3077a2.4462 2.4462 0 00-.2126 1.2361c.1203 1.2953 1.2422 2.2156 2.5083 2.0572a2.345 2.345 0 001.4246-.7368s.5885-.4883.5795-1.7334c-.008-1.0156-.5795-1.578-.5795-1.578a2.2116 2.2116 0 00-1.8145-.6456c-1.6231-.036-1.8637-1.3073-1.4056-3.7033.1685-.4251.2416-.8802.2266-1.3354a3.4166 3.4166 0 00-2.1304-3.2953c-.039-.017-.0782-.03-.1183-.0461a1.5138 1.5138 0 00-.1343-.0461 3.4156 3.4156 0 00-4.004 1.4526c-.8171.8973-1.187 1.4417-2.0272 1.4417-.799 0-1.211-.5444-2.0271-1.4417a3.4126 3.4126 0 00-4.1374-1.4075c-.0401.016-.0792.029-.1193.0461a3.4156 3.4156 0 00-2.1294 3.2953c-.016.4552.0582.9103.2256 1.3354.4581 2.397.2175 3.6672-1.4045 3.7033-.795-.0852-1.3885.2426-1.988.8431-.6016.5995-.5514 2.2056 0 2.9063.4.5103.9423.8632 1.598.9454"/></svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 47.66 186.63 139.97">
|
|
3
|
+
<title>OpenRefine logo (2018)</title>
|
|
4
|
+
<!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
|
|
5
|
+
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
6
|
+
<polygon id="Stroke-25" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="46.6561 94.3132 46.6561 47.6562 93.3131 47.6562" fill="#00dcff"/>
|
|
7
|
+
<polygon id="Stroke-27" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="46.6561 94.3132 46.6561 47.6562 0.0001 94.3132" fill="#00ffff"/>
|
|
8
|
+
<polygon id="Stroke-29" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="139.9696 94.3132 139.9696 47.6562 93.3136 47.6562" fill="#00b4ff"/>
|
|
9
|
+
<polygon id="Stroke-31" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="46.6561 94.3132 93.3131 47.6562 139.9691 94.3132" fill="#00c8ff"/>
|
|
10
|
+
<polygon id="Stroke-33" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="139.9696 94.3132 139.9696 47.6562 186.6256 94.3132" fill="#00a0ff"/>
|
|
11
|
+
<polygon id="Stroke-35" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="46.6561 94.3132 0.0001 94.3132 93.3131 187.6262" fill="#00c8ff"/>
|
|
12
|
+
<polygon id="Stroke-37" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="139.9696 94.3132 46.6566 94.3132 93.3136 187.6262" fill="#00a0ff"/>
|
|
13
|
+
<polygon id="Stroke-39" stroke="none" stroke-width="4px" stroke-linecap="round" stroke-linejoin="round" points="186.6258 94.3132 139.9698 94.3132 93.3138 187.6262" fill="#0078ff"/>
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="#47A141" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Overleaf</title><path d="M22.3515.7484C19.1109-.5101 7.365-.982 7.3452 6.0266c-3.4272 2.194-5.6967 5.768-5.6967 9.598a8.373 8.373 0 0 0 13.1225 6.898 8.373 8.373 0 0 0-1.7668-14.7194c-.6062-.2339-1.9234-.6481-2.9753-.559-1.5007.9544-3.3308 2.9155-4.1949 4.8693 2.5894-3.082 7.5046-2.425 9.1937 1.2287 1.6892 3.6538-.9944 7.8237-5.0198 7.7998a5.4995 5.4995 0 0 1-4.1949-1.9328c-1.485-1.7483-1.8678-3.6444-1.5615-5.4975 1.057-6.4947 8.759-10.1894 14.486-11.6094-1.8677.989-5.2373 2.6134-7.5948 4.3837C18.015 9.1382 19.1308 3.345 22.3515.7484z"/></svg>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
|
|
2
|
+
<title id="title">Papers</title>
|
|
3
|
+
<rect width="64" height="64" rx="14" fill="#ECFEFF"/>
|
|
4
|
+
<path d="M21 14h17l9 9v27H21V14Z" fill="#0891B2"/>
|
|
5
|
+
<path d="M38 14v10h9" fill="#67E8F9"/>
|
|
6
|
+
<path d="M27 31h14M27 38h14M27 45h9" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round"/>
|
|
7
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="#F2C811" d="M10 12a1 1 0 0 1 1 1v11H4a1 1 0 0 1-1-1V13a1 1 0 0 1 1-1zm-2-.5V7a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v17h-4.5V13a1.5 1.5 0 0 0-1.5-1.5zm5-6V1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v22a1 1 0 0 1-1 1h-3.5V7A1.5 1.5 0 0 0 15 5.5z"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="#3776AB" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Python</title><path d="M14.25.18l.9.2.73.26.59.3.45.32.34.34.25.34.16.33.1.3.04.26.02.2-.01.13V8.5l-.05.63-.13.55-.21.46-.26.38-.3.31-.33.25-.35.19-.35.14-.33.1-.3.07-.26.04-.21.02H8.77l-.69.05-.59.14-.5.22-.41.27-.33.32-.27.35-.2.36-.15.37-.1.35-.07.32-.04.27-.02.21v3.06H3.17l-.21-.03-.28-.07-.32-.12-.35-.18-.36-.26-.36-.36-.35-.46-.32-.59-.28-.73-.21-.88-.14-1.05-.05-1.23.06-1.22.16-1.04.24-.87.32-.71.36-.57.4-.44.42-.33.42-.24.4-.16.36-.1.32-.05.24-.01h.16l.06.01h8.16v-.83H6.18l-.01-2.75-.02-.37.05-.34.11-.31.17-.28.25-.26.31-.23.38-.2.44-.18.51-.15.58-.12.64-.1.71-.06.77-.04.84-.02 1.27.05zm-6.3 1.98l-.23.33-.08.41.08.41.23.34.33.22.41.09.41-.09.33-.22.23-.34.08-.41-.08-.41-.23-.33-.33-.22-.41-.09-.41.09zm13.09 3.95l.28.06.32.12.35.18.36.27.36.35.35.47.32.59.28.73.21.88.14 1.04.05 1.23-.06 1.23-.16 1.04-.24.86-.32.71-.36.57-.4.45-.42.33-.42.24-.4.16-.36.09-.32.05-.24.02-.16-.01h-8.22v.82h5.84l.01 2.76.02.36-.05.34-.11.31-.17.29-.25.25-.31.24-.38.2-.44.17-.51.15-.58.13-.64.09-.71.07-.77.04-.84.01-1.27-.04-1.07-.14-.9-.2-.73-.25-.59-.3-.45-.33-.34-.34-.25-.34-.16-.33-.1-.3-.04-.25-.02-.2.01-.13v-5.34l.05-.64.13-.54.21-.46.26-.38.3-.32.33-.24.35-.2.35-.14.33-.1.3-.06.26-.04.21-.02.13-.01h5.84l.69-.05.59-.14.5-.21.41-.28.33-.32.27-.35.2-.36.15-.36.1-.35.07-.32.04-.28.02-.21V6.07h2.09l.14.01zm-6.47 14.25l-.23.33-.08.41.08.41.23.33.33.23.41.08.41-.08.33-.23.23-.33.08-.41-.08-.41-.23-.33-.33-.23-.41-.08-.41.08z"/></svg>
|
bibexpy/_web/tools/r.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="#276DC3" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>R</title><path d="M12 2.746c-6.627 0-12 3.599-12 8.037 0 3.897 4.144 7.144 9.64 7.88V16.26c-2.924-.915-4.925-2.755-4.925-4.877 0-3.035 4.084-5.494 9.12-5.494 5.038 0 8.757 1.683 8.757 5.494 0 1.976-.999 3.379-2.662 4.272.09.066.174.128.258.216.169.149.25.363.372.544 2.128-1.45 3.44-3.437 3.44-5.631 0-4.44-5.373-8.038-12-8.038zm-2.111 4.99v13.516l4.093-.002-.002-5.291h1.1c.225 0 .321.066.549.25.272.22.715.982.715.982l2.164 4.063 4.627-.002-2.864-4.826s-.086-.193-.265-.383a2.22 2.22 0 00-.582-.416c-.422-.214-1.149-.434-1.149-.434s3.578-.264 3.578-3.826c0-3.562-3.744-3.63-3.744-3.63zm4.127 2.93l2.478.002s1.149-.062 1.149 1.127c0 1.165-1.149 1.17-1.149 1.17h-2.478zm1.754 6.119c-.494.049-1.012.079-1.54.088v1.807a16.622 16.622 0 002.37-.473l-.471-.891s-.108-.183-.248-.394c-.039-.054-.08-.098-.111-.137z"/></svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
|
|
2
|
+
<title id="title">RefWorks</title>
|
|
3
|
+
<rect width="64" height="64" rx="14" fill="#F5F3FF"/>
|
|
4
|
+
<path d="M18 17h15.6c7.1 0 11.4 3.8 11.4 10.1 0 4.2-2 7.3-5.5 8.9L47 50h-8.8l-6.5-12.4h-5.9V50H18V17Zm15 14c2.8 0 4.5-1.4 4.5-3.9s-1.7-3.9-4.5-3.9h-7.2V31H33Z" fill="#7C3AED"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-labelledby="title">
|
|
2
|
+
<title id="title">Scite</title>
|
|
3
|
+
<rect width="64" height="64" rx="14" fill="#EEF2FF"/>
|
|
4
|
+
<path d="M44 22.3c-2.5-1.4-5.7-2.3-9.4-2.3-4.1 0-6.2 1.2-6.2 3.3 0 2.2 2.5 2.8 7.2 3.8 6.3 1.3 10.7 3.6 10.7 10.2 0 6.8-5.4 10.8-14.1 10.8-5 0-9.5-1.2-12.5-3.1v-7.6c3.2 2.3 7.3 3.7 11.6 3.7 4.3 0 6.5-1.2 6.5-3.5 0-2.4-2.4-3.1-7.4-4.1-6.2-1.3-10.5-3.4-10.5-9.8 0-6.5 5.2-10.5 13.8-10.5 4.4 0 7.9.8 10.3 2.1v7Z" fill="#4F46E5"/>
|
|
5
|
+
</svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 24 24"><path fill="#E97627" d="M11.654.174v2.203H9.682v.58h1.972V5.16h.696V2.957h1.97v-.58h-1.97V.174h-.348zm6.03 2.262l-.002 1.623v1.623h-2.957v.927h2.957v3.188h1.043l.011-1.582l.02-1.576l1.465-.02l1.46-.01v-.927h-2.953V2.436h-.522zm-12.407.06v3.19H2.291v.925h2.986v3.19h.985V6.61h3.013v-.925H6.262V2.496H5.77zm6.086 5.27v3.593H8.06v1.188h3.304v3.596h1.28v-3.596h3.309v-1.188h-3.31V7.766h-.637zm9.721 1.55v2.221h-2.012v.811h2.012v2.261h.887v-2.261H24v-.811h-2.029v-2.22h-.422zm-19.111.131v2.174H0v.621h1.973v2.194h.667v-2.194h2v-.62H2.609V9.446h-.318zm15.709 4.516v3.254h-3.016v.927h3.016v3.217h1.072v-3.216h2.986v-.928h-2.986v-3.254h-.533zm-12.463.008v3.246H2.262v.928h2.957v3.189H6.32v-3.189h2.955v-.928H6.32V13.97h-.55zm6.316 4.578l.002 1.103v1.1H9.566v.812h1.971v2.262h.928l.012-1.119l.017-1.143h1.969v-.812h-2v-2.203h-.465z"/></svg>
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg fill="#CC2936" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Zotero</title><path d="M21.231 2.462 7.18 20.923h14.564V24H2.256v-2.462L16.308 3.076H2.975V0h18.256v2.462z"/></svg>
|
bibexpy/cli.py
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
"""BibexPy v2 — komut satırı başlatıcı.
|
|
2
|
+
|
|
3
|
+
`pip install bibexpy` sonrası `bibexpy` komutu bu modülü çağırır:
|
|
4
|
+
|
|
5
|
+
bibexpy # ~/.bibexpy/storage, tarayıcı otomatik açılır, port 8001
|
|
6
|
+
bibexpy --port 8080 # özel port
|
|
7
|
+
bibexpy --no-browser # sadece sunucu, tarayıcı açma
|
|
8
|
+
bibexpy --storage ./data # bu çalıştırma için özel depolama klasörü
|
|
9
|
+
bibexpy --version # sürüm
|
|
10
|
+
|
|
11
|
+
Mimari:
|
|
12
|
+
• _web/ — Next.js static export (BIBEXPY_FRONTEND_DIST ile main.py'ye verilir)
|
|
13
|
+
• _server/ — FastAPI uygulaması; sys.path'e eklenince flat import'lar çözülür
|
|
14
|
+
• bibex_core — wheel'da ikinci top-level paket olarak kurulu
|
|
15
|
+
|
|
16
|
+
Node.js / npm GEREKMEZ — UI önceden derlenmiş statik dosyalardır.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
from __future__ import annotations
|
|
20
|
+
|
|
21
|
+
import argparse
|
|
22
|
+
import os
|
|
23
|
+
import re
|
|
24
|
+
import socket
|
|
25
|
+
import sys
|
|
26
|
+
import threading
|
|
27
|
+
import time
|
|
28
|
+
import urllib.request
|
|
29
|
+
import webbrowser
|
|
30
|
+
from pathlib import Path
|
|
31
|
+
|
|
32
|
+
# Wheel içindeki bu paketin kökü (cli.py'nin bulunduğu dizin).
|
|
33
|
+
_PKG_DIR = Path(__file__).resolve().parent
|
|
34
|
+
_WEB_DIR = _PKG_DIR / "_web"
|
|
35
|
+
_SERVER_DIR = _PKG_DIR / "_server"
|
|
36
|
+
|
|
37
|
+
__version__ = "2.0.0"
|
|
38
|
+
__codename__ = "Helium" # v2 surum kod adi (v1 "Hydrogen"in ardili; H -> He)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
# Ilk-calistirma .env sablonu — kullanici anahtarlari nereye gireceğini gorur.
|
|
42
|
+
# Hepsi opsiyonel; anahtarsiz da calisir (enrichment/LLM graceful skip).
|
|
43
|
+
_ENV_TEMPLATE = """\
|
|
44
|
+
# BibexPy ayarlari — API anahtarlari (hepsi OPSIYONEL).
|
|
45
|
+
# Crossref, OpenAlex ve Unpaywall UCRETSIZdir; yalniz Scopus anahtar ister.
|
|
46
|
+
|
|
47
|
+
# --- Zenginlestirme kaynaklari (opsiyonel) ---
|
|
48
|
+
SCOPUS_API_KEY=
|
|
49
|
+
CROSSREF_EMAIL=
|
|
50
|
+
UNPAYWALL_EMAIL=
|
|
51
|
+
SEMANTIC_SCHOLAR_API_KEY=
|
|
52
|
+
|
|
53
|
+
# --- LLM (disambiguation icin, opsiyonel) ---
|
|
54
|
+
# Saglayici: deepseek | openai | openrouter | custom
|
|
55
|
+
LLM_PROVIDER=deepseek
|
|
56
|
+
LLM_API_KEY=
|
|
57
|
+
LLM_BASE_URL=https://api.deepseek.com
|
|
58
|
+
LLM_MODEL=deepseek-v4-flash
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def _write_env_template(env_file: Path) -> None:
|
|
63
|
+
"""`.env` yoksa yorumlu bir sablon yaz (varsa dokunma)."""
|
|
64
|
+
if env_file.exists():
|
|
65
|
+
return
|
|
66
|
+
try:
|
|
67
|
+
env_file.write_text(_ENV_TEMPLATE, encoding="utf-8")
|
|
68
|
+
except OSError:
|
|
69
|
+
pass
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _port_is_free(host: str, port: int) -> bool:
|
|
73
|
+
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
74
|
+
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
75
|
+
try:
|
|
76
|
+
s.bind((host, port))
|
|
77
|
+
return True
|
|
78
|
+
except OSError:
|
|
79
|
+
return False
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _resolve_port(host: str, preferred: int) -> int:
|
|
83
|
+
"""Istenen port boşsa onu; degilse sonraki 20'yi, sonra OS'tan boş port dener."""
|
|
84
|
+
if _port_is_free(host, preferred):
|
|
85
|
+
return preferred
|
|
86
|
+
for p in range(preferred + 1, preferred + 21):
|
|
87
|
+
if _port_is_free(host, p):
|
|
88
|
+
return p
|
|
89
|
+
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
90
|
+
s.bind((host, 0))
|
|
91
|
+
return int(s.getsockname()[1])
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def _read_env_value(env_file: Path, key: str) -> str | None:
|
|
95
|
+
"""`.env` dosyasından tek bir KEY değerini oku (yoksa None)."""
|
|
96
|
+
if not env_file.is_file():
|
|
97
|
+
return None
|
|
98
|
+
try:
|
|
99
|
+
for raw in env_file.read_text(encoding="utf-8").splitlines():
|
|
100
|
+
line = raw.strip()
|
|
101
|
+
m = re.match(rf"^{re.escape(key)}\s*=\s*(.*)$", line)
|
|
102
|
+
if m:
|
|
103
|
+
val = m.group(1).strip()
|
|
104
|
+
if (val.startswith('"') and val.endswith('"')) or (
|
|
105
|
+
val.startswith("'") and val.endswith("'")
|
|
106
|
+
):
|
|
107
|
+
val = val[1:-1]
|
|
108
|
+
return val
|
|
109
|
+
except OSError:
|
|
110
|
+
return None
|
|
111
|
+
return None
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _open_browser_when_ready(url: str, health_url: str, timeout: float = 30.0) -> None:
|
|
115
|
+
"""Sunucu /api/health'e cevap verince tarayıcıyı aç.
|
|
116
|
+
|
|
117
|
+
Ayrı thread'de çalışır; sunucunun ayağa kalkmasını bekler ki tarayıcı
|
|
118
|
+
'bağlantı reddedildi' göstermesin.
|
|
119
|
+
"""
|
|
120
|
+
deadline = time.monotonic() + timeout
|
|
121
|
+
while time.monotonic() < deadline:
|
|
122
|
+
try:
|
|
123
|
+
with urllib.request.urlopen(health_url, timeout=1.5) as resp:
|
|
124
|
+
if resp.status == 200:
|
|
125
|
+
break
|
|
126
|
+
except Exception:
|
|
127
|
+
time.sleep(0.4)
|
|
128
|
+
try:
|
|
129
|
+
webbrowser.open(url)
|
|
130
|
+
except Exception:
|
|
131
|
+
pass
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def _build_parser() -> argparse.ArgumentParser:
|
|
135
|
+
p = argparse.ArgumentParser(
|
|
136
|
+
prog="bibexpy",
|
|
137
|
+
description="Self-hosted bibliometric data preparation tool "
|
|
138
|
+
"(Scopus + Web of Science).",
|
|
139
|
+
)
|
|
140
|
+
p.add_argument("--host", default="127.0.0.1", help="Bağlanılacak host (varsayılan: 127.0.0.1)")
|
|
141
|
+
p.add_argument("--port", type=int, default=6060, help="Port (varsayılan: 6060)")
|
|
142
|
+
p.add_argument(
|
|
143
|
+
"--storage",
|
|
144
|
+
default=None,
|
|
145
|
+
help="Depolama klasörü (varsayılan: ~/.bibexpy/storage veya .env'deki STORAGE_DIR)",
|
|
146
|
+
)
|
|
147
|
+
p.add_argument(
|
|
148
|
+
"--config-dir",
|
|
149
|
+
default=None,
|
|
150
|
+
help="Yapılandırma klasörü (.env burada; varsayılan: ~/.bibexpy)",
|
|
151
|
+
)
|
|
152
|
+
p.add_argument("--no-browser", action="store_true", help="Tarayıcıyı otomatik açma")
|
|
153
|
+
p.add_argument("--version", action="version", version=f"BibexPy {__version__} ({__codename__})")
|
|
154
|
+
return p
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
def main(argv: list[str] | None = None) -> int:
|
|
158
|
+
# Windows konsolu (cp1254/cp850 vb.) UTF-8 olmayan codepage'lerde Türkçe
|
|
159
|
+
# karakterlerde veya ok işaretlerinde UnicodeEncodeError ile çökebilir.
|
|
160
|
+
# stdout/stderr'i UTF-8'e ayarla; errors='replace' → asla raise etmez.
|
|
161
|
+
for _stream in (sys.stdout, sys.stderr):
|
|
162
|
+
try:
|
|
163
|
+
_stream.reconfigure(encoding="utf-8", errors="replace") # type: ignore[attr-defined]
|
|
164
|
+
except Exception:
|
|
165
|
+
pass
|
|
166
|
+
|
|
167
|
+
args = _build_parser().parse_args(argv)
|
|
168
|
+
|
|
169
|
+
# 1. Paket bütünlüğü kontrolü — build script çalışmadan kurulmuşsa anlamlı hata ver.
|
|
170
|
+
if not (_WEB_DIR / "index.html").is_file():
|
|
171
|
+
sys.stderr.write(
|
|
172
|
+
"HATA: Gömülü frontend bulunamadı (_web/index.html yok).\n"
|
|
173
|
+
"Bu wheel düzgün build edilmemiş. scripts/build_wheel.* ile yeniden üretin.\n"
|
|
174
|
+
)
|
|
175
|
+
return 2
|
|
176
|
+
if not (_SERVER_DIR / "main.py").is_file():
|
|
177
|
+
sys.stderr.write(
|
|
178
|
+
"HATA: Gömülü sunucu bulunamadı (_server/main.py yok).\n"
|
|
179
|
+
"Bu wheel düzgün build edilmemiş. scripts/build_wheel.* ile yeniden üretin.\n"
|
|
180
|
+
)
|
|
181
|
+
return 2
|
|
182
|
+
|
|
183
|
+
# 2. Yapılandırma + depolama klasörleri (yazılabilir kullanıcı konumu).
|
|
184
|
+
config_dir = Path(args.config_dir).expanduser() if args.config_dir else Path.home() / ".bibexpy"
|
|
185
|
+
config_dir.mkdir(parents=True, exist_ok=True)
|
|
186
|
+
env_file = config_dir / ".env"
|
|
187
|
+
_write_env_template(env_file) # ilk calistirmada yorumlu sablon
|
|
188
|
+
|
|
189
|
+
# Depolama önceliği: --storage > .env'deki STORAGE_DIR > <config_dir>/storage
|
|
190
|
+
storage = (
|
|
191
|
+
args.storage
|
|
192
|
+
or _read_env_value(env_file, "STORAGE_DIR")
|
|
193
|
+
or str(config_dir / "storage")
|
|
194
|
+
)
|
|
195
|
+
storage_path = Path(storage).expanduser()
|
|
196
|
+
storage_path.mkdir(parents=True, exist_ok=True)
|
|
197
|
+
|
|
198
|
+
# 3. Ortam değişkenleri — main.py + config.py + settings router bunları okur.
|
|
199
|
+
os.environ["BIBEXPY_CONFIG_DIR"] = str(config_dir)
|
|
200
|
+
os.environ["BIBEXPY_FRONTEND_DIST"] = str(_WEB_DIR)
|
|
201
|
+
os.environ["STORAGE_DIR"] = str(storage_path)
|
|
202
|
+
|
|
203
|
+
# 4. Flat import'lar (from config import ..., from routers import ...) için
|
|
204
|
+
# gömülü sunucu dizinini sys.path başına ekle.
|
|
205
|
+
sys.path.insert(0, str(_SERVER_DIR))
|
|
206
|
+
|
|
207
|
+
# 5. Uygulamayı import et (env var'lar set edildikten SONRA — _frontend_root()
|
|
208
|
+
# BIBEXPY_FRONTEND_DIST'i okuyup statik UI'yi mount eder).
|
|
209
|
+
try:
|
|
210
|
+
from main import app # type: ignore # noqa: E402 (gömülü _server modülü)
|
|
211
|
+
except Exception as exc: # pragma: no cover
|
|
212
|
+
sys.stderr.write(f"HATA: Sunucu uygulaması yüklenemedi: {exc}\n")
|
|
213
|
+
return 1
|
|
214
|
+
|
|
215
|
+
import uvicorn
|
|
216
|
+
|
|
217
|
+
port = _resolve_port(args.host, args.port)
|
|
218
|
+
if port != args.port:
|
|
219
|
+
print(f" (not: {args.port} portu dolu; {port} kullaniliyor)")
|
|
220
|
+
url = f"http://{args.host}:{port}/"
|
|
221
|
+
health = f"http://{args.host}:{port}/api/health"
|
|
222
|
+
|
|
223
|
+
print(f" BibexPy v{__version__} \"{__codename__}\"")
|
|
224
|
+
print(f" -> Arayuz: {url}")
|
|
225
|
+
print(f" -> Depolama: {storage_path}")
|
|
226
|
+
print(f" -> Ayarlar: {env_file}")
|
|
227
|
+
print(f" (Durdurmak icin Ctrl+C)\n")
|
|
228
|
+
|
|
229
|
+
if not args.no_browser:
|
|
230
|
+
threading.Thread(
|
|
231
|
+
target=_open_browser_when_ready, args=(url, health), daemon=True
|
|
232
|
+
).start()
|
|
233
|
+
|
|
234
|
+
try:
|
|
235
|
+
uvicorn.run(app, host=args.host, port=port, log_level="info")
|
|
236
|
+
except KeyboardInterrupt: # pragma: no cover
|
|
237
|
+
pass
|
|
238
|
+
return 0
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
if __name__ == "__main__": # pragma: no cover
|
|
242
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bibexpy
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: Self-hosted bibliometric data preparation tool (Scopus + Web of Science)
|
|
5
|
+
Author: Burak Can Kara, Alperen Şahin, Taşkın Dirsehan
|
|
6
|
+
License: GPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://bibexpy.com
|
|
8
|
+
Project-URL: Repository, https://github.com/bcankara/BibexPy
|
|
9
|
+
Project-URL: Paper, https://doi.org/10.1016/j.softx.2025.102098
|
|
10
|
+
Keywords: bibliometrics,scientometrics,scopus,web of science,research
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
21
|
+
Classifier: Framework :: FastAPI
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Requires-Dist: fastapi>=0.110.0
|
|
26
|
+
Requires-Dist: uvicorn[standard]>=0.27.0
|
|
27
|
+
Requires-Dist: python-multipart>=0.0.9
|
|
28
|
+
Requires-Dist: pydantic>=2.6.0
|
|
29
|
+
Requires-Dist: pydantic-settings>=2.2.0
|
|
30
|
+
Requires-Dist: sse-starlette>=2.0.0
|
|
31
|
+
Requires-Dist: pandas>=2.0.0
|
|
32
|
+
Requires-Dist: numpy>=1.24.0
|
|
33
|
+
Requires-Dist: openpyxl>=3.1.2
|
|
34
|
+
Requires-Dist: scikit-learn>=1.3.0
|
|
35
|
+
Requires-Dist: nltk>=3.8.1
|
|
36
|
+
Requires-Dist: requests>=2.31.0
|
|
37
|
+
Requires-Dist: urllib3>=2.0.0
|
|
38
|
+
Requires-Dist: certifi>=2023.5.7
|
|
39
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
40
|
+
Requires-Dist: tqdm>=4.65.0
|
|
41
|
+
Requires-Dist: colorama>=0.4.6
|
|
42
|
+
Requires-Dist: unidecode==1.3.6
|
|
43
|
+
Requires-Dist: typing-extensions>=4.7.0
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
<p align="center">
|
|
47
|
+
<a href="https://bibexpy.com">
|
|
48
|
+
<img src="https://raw.githubusercontent.com/bcankara/BibexPy/main/apps/web/public/images/bibexpy-logo-full.png" alt="BibexPy — V2.0.0 Helium — Bibliometrics Experience with Python" width="420">
|
|
49
|
+
</a>
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
**Self-hosted, reproducible bibliometric data preparation for Web of Science & Scopus.**
|
|
53
|
+
|
|
54
|
+
BibexPy v2.0.0 **"Helium"** merges, filters, harmonizes, enriches and exports WoS + Scopus
|
|
55
|
+
records through a local web interface — with full provenance — and keeps your licensed
|
|
56
|
+
exports on your own machine. It prepares analysis-ready datasets for VOSviewer, Biblioshiny,
|
|
57
|
+
BibTeX, RIS, Excel and more.
|
|
58
|
+
|
|
59
|
+
## Install
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
pip install bibexpy
|
|
63
|
+
bibexpy # launches the local web UI (browser opens automatically)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Requires **Python 3.10+** only — **no Node.js/npm needed** (the interface ships precompiled
|
|
67
|
+
inside the package). Works on Windows, macOS and Linux.
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
bibexpy --port 8080 # custom port
|
|
71
|
+
bibexpy --no-browser # server only
|
|
72
|
+
bibexpy --storage ./data # custom storage folder
|
|
73
|
+
bibexpy --version
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Defaults: UI at `http://127.0.0.1:6060`, data under `~/.bibexpy/storage`, settings/API keys
|
|
77
|
+
under `~/.bibexpy/.env` (managed from the in-app Settings page). Press `Ctrl+C` to stop.
|
|
78
|
+
|
|
79
|
+
## Highlights (v2)
|
|
80
|
+
|
|
81
|
+
- One-click **Smart Merge** — probabilistic record linkage (DOI + Jaro–Winkler), confidence
|
|
82
|
+
scoring, optional borderline review, and a copy-ready methodology paragraph.
|
|
83
|
+
- **ORCID-first** author disambiguation + **address harmonization** (organization roll-up,
|
|
84
|
+
country standardization).
|
|
85
|
+
- **Multi-source enrichment** (CrossRef, OpenAlex, Scopus, DataCite, Unpaywall, Europe PMC,
|
|
86
|
+
Semantic Scholar) with reverse-DOI recovery — verifiable sources only.
|
|
87
|
+
- Reproducible, preset-based **filtering** and a bibliometrically weighted **quality dashboard**.
|
|
88
|
+
- Full **provenance**: append-only audit log, snapshots, isolated analyses, auto-generated
|
|
89
|
+
methodology narrative.
|
|
90
|
+
- Structured **export**: WoS, VOSviewer TSV, BibTeX, RIS, CSV, TSV, XLSX.
|
|
91
|
+
|
|
92
|
+
## Links
|
|
93
|
+
|
|
94
|
+
[Website](https://bibexpy.com) · [Docs](https://bibexpy.com/doc) ·
|
|
95
|
+
[GitHub](https://github.com/bcankara/BibexPy) · [Paper (SoftwareX)](https://doi.org/10.1016/j.softx.2025.102098)
|
|
96
|
+
|
|
97
|
+
## Citation
|
|
98
|
+
|
|
99
|
+
> Kara, B. C., Şahin, A., & Dirsehan, T. (2025). BibexPy: Harmonizing the bibliometric symphony
|
|
100
|
+
> of Scopus and Web of Science. *SoftwareX*, 30, 102098.
|
|
101
|
+
> https://doi.org/10.1016/j.softx.2025.102098
|
|
102
|
+
|
|
103
|
+
## License
|
|
104
|
+
|
|
105
|
+
GPL-3.0-or-later
|