From 3fadf2b960a7ea2cc9a8e41b30b767d966e1cbb5 Mon Sep 17 00:00:00 2001 From: Jeremy Nelson Date: Wed, 28 Apr 2021 16:38:00 -0600 Subject: [PATCH] Using KMeans clustering on SPOC papers --- doc/clustering.ipynb | 383 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 383 insertions(+) create mode 100644 doc/clustering.ipynb diff --git a/doc/clustering.ipynb b/doc/clustering.ipynb new file mode 100644 index 0000000..2f2d68b --- /dev/null +++ b/doc/clustering.ipynb @@ -0,0 +1,383 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "developmental-blink", + "metadata": {}, + "outputs": [], + "source": [ + "%reload_ext autoreload\n", + "%autoreload 2\n", + "%matplotlib inline\n", + "\n", + "import datetime\n", + "import pathlib\n", + "import re\n", + "import pandas as pd\n", + "import lxml.etree as etree\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from sentence_transformers import SentenceTransformer\n", + "from nltk.corpus import stopwords\n", + "from sklearn.cluster import KMeans\n", + "from IPython.display import display, Markdown\n", + "\n", + "sbert_model = SentenceTransformer('bert-base-nli-mean-tokens')\n", + "papers = pathlib.Path(\"../../papers_tei/\")\n", + "papers_metadata = pd.read_csv(\"../data/spoc-paper-metadata.csv\")\n", + "stop_words_list = stopwords.words('english')\n", + "TEI = {\"tei\": \"http://www.tei-c.org/ns/1.0\"}\n", + "special_char_re = re.compile(r'[^a-zA-Z]')" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "retained-taste", + "metadata": {}, + "outputs": [], + "source": [ + "# Extracts text from Paper XML\n", + "xml_pathlist = [x for x in papers.glob('*.xml')]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "adapted-helena", + "metadata": {}, + "outputs": [], + "source": [ + "def get_paper_text(paper_path):\n", + " full_text = ''\n", + " xml_doc = etree.XML(paper_path.read_bytes())\n", + " for row in xml_doc.itertext():\n", + " if \"GROBID\" in row:\n", + " continue\n", + " full_text += f\"\\n{row}\"\n", + " return full_text\n", + "\n", + "def clean_text(paper_text):\n", + " cleaned = []\n", + " for char in paper_text.split():\n", + " cleaned_char = special_char_re.sub(' ', char).lower()\n", + " if cleaned_char in stop_words_list:\n", + " continue\n", + " cleaned.append(cleaned_char)\n", + " return ' '.join(cleaned)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "norwegian-swiss", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Started at 2021-04-28 22:08:01.962263\n", + "0....................100....................200....................300....................400....................500....................600....................700....................800....................900....................1000....................1100....................1200....................1300....................1400....................1500....................1600......\n", + "Finished at 2021-04-28 22:08:15.981932, total time 0.23333333333333334 minutes\n" + ] + } + ], + "source": [ + "start = datetime.datetime.utcnow()\n", + "print(f\"Started at {start}\")\n", + "all_papers = []\n", + "for i,row in enumerate(xml_pathlist):\n", + " raw_text = get_paper_text(row)\n", + " record = [row.name, clean_text(raw_text)]\n", + " all_papers.append(record)\n", + " if not i%5 and i > 0:\n", + " print(\".\", end=\"\")\n", + " if not i%100:\n", + " print(f\"{i}\", end=\"\")\n", + "end = datetime.datetime.utcnow()\n", + "print(f\"\\nFinished at {end}, total time {(end-start).seconds / 60.} minutes\")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "variable-idaho", + "metadata": {}, + "outputs": [], + "source": [ + "all_df = pd.DataFrame(all_papers, columns=['XML file', 'Text'])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "protecting-basis", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Start Paper Embedding 2021-04-28 22:08:23.209580\n", + "Finished at 2021-04-28 22:15:10.362337, total time 6.783333333333333\n" + ] + } + ], + "source": [ + "embed_start = datetime.datetime.utcnow()\n", + "print(f\"Start Paper Embedding {embed_start}\")\n", + "paper_embeddings = sbert_model.encode(all_df['Text'])\n", + "embed_end = datetime.datetime.utcnow()\n", + "print(f\"Finished at {embed_end}, total time {(embed_end-embed_start).seconds / 60.}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "infinite-underwear", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Starting KMeans WCSS 2021-04-28 22:15:10.415496\n", + ".................................................\n", + "Finished WCSS at 2021-04-28 22:16:32.115943, total time 1.35\n" + ] + } + ], + "source": [ + "kmeans_start = datetime.datetime.utcnow()\n", + "print(f\"Starting KMeans WCSS {kmeans_start}\")\n", + "wcss = []\n", + "for i in range(1,50):\n", + " kmeans = KMeans(n_clusters=i, init = 'k-means++', random_state=42)\n", + " kmeans.fit(paper_embeddings)\n", + " wcss.append(kmeans.inertia_)\n", + " print(\".\", end=\"\")\n", + "kmeans_end = datetime.datetime.utcnow()\n", + "print(f\"\\nFinished WCSS at {kmeans_end}, total time {(kmeans_end-kmeans_start).seconds / 60.}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "forty-memorabilia", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10,8))\n", + "plt.plot(range(1,50), wcss, marker = 'o', linestyle='--')\n", + "plt.xlabel('Number of clusters')\n", + "plt.ylabel('WCSS')\n", + "plt.title('K-means Clustering')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "medical-window", + "metadata": {}, + "source": [ + "## Investigation of Clusters \n", + "Before we continue, we will create two functions `get_group` and `group_detail`. The `get_group` returns a list of papers clustered by group. The `group_detail` function displays details about a specific grouping in a cluster." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "occupational-hartford", + "metadata": {}, + "outputs": [], + "source": [ + "def get_groups(number: int) -> list:\n", + " cluster_model = KMeans(n_clusters=number)\n", + " predicted_cluster = cluster_model.fit_predict(paper_embeddings)\n", + " clustered_papers = all_df.copy()\n", + " clustered_papers['cluster'] = clustered_papers.index.map(lambda x: predicted_cluster[x])\n", + " return [group for group in clustered_papers.groupby(by='cluster')]\n", + "\n", + "def group_detail(groups: list, number: int):\n", + " if number < 1 or number > len(groups):\n", + " raise ValueError(f\"Invalid number {number}, must be between 1 and {len(groups)}\")\n", + " group = groups[number-1]\n", + " display(Markdown(f\"# Details for Group Number {group[0]+1} of {len(groups)} clusters\"))\n", + " display(Markdown(f\"## Number of papers: {len(group[1])}\"))\n", + " table = \"\"\"\n", + " \"\"\"\n", + " for i,row in enumerate(group[1].iterrows()):\n", + " record = row[1]\n", + " table += f\"\"\n", + " metadata = papers_metadata[papers_metadata[\"XML file\"].isin([record['XML file']])]\n", + " if len(metadata) > 0:\n", + " table += f\"\"\n", + " table += f\"\"\n", + " else:\n", + " table += \"\"\n", + " table += \"\"\n", + " tabel = \"
NumberFile NameTitleYear
{i+1}{record['XML file']}{metadata.iloc[0]['Title']}{int(metadata.iloc[0]['Year'])}UnknownUnknown
\"\n", + " display(Markdown(table))\n", + " " + ] + }, + { + "cell_type": "markdown", + "id": "sought-boating", + "metadata": {}, + "source": [ + "From the above graph, cluster 24 is where the graph is starting to flatten out so we will use 24 clusters and then investigate the specific groupings." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "victorian-surname", + "metadata": {}, + "outputs": [], + "source": [ + "clusters24 = get_groups(24)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "danish-japanese", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "# Details for Group Number 10 of 24 clusters" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## Number of papers: 58" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "group_detail(clusters24, 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "painful-minneapolis", + "metadata": {}, + "outputs": [ + { + "data": { + "text/markdown": [ + "# Details for Group Number 20 of 24 clusters" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "## Number of papers: 53" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/markdown": [ + "
NumberFile NameTitleYear
1hms_pv812ts3293.tei.xmlBattillaria attramentaria and its undescribed cercariae parasite: an inquiry into cercarial emergence1980
2ucla_1987_FischerRachel.tei.xmlUnknownUnknown
3hms_sp795pd7881.tei.xmlTolerance of Tigriopus californicus (Baker, 1912) to slow increases in salinity produced by evaporation and hypersaline solutions1996
4hms_kd740kw1105.tei.xmlA study of the vesicomyid clams in the Monterey Bay Canyon: time lapse video analysis of adult reactions to varying sulfide levels, and examination of egg buoyancies and flotation rates1993
5hms_dz230sp9110.tei.xmlPopulation genetics of the red alga Mastocarpus papillatus on the California coast1999
6ucla_1978_SkollerDebbie_Sspinosus.tei.xmlUnknownUnknown
7hms_mj025vm9297.tei.xmlActivity patterns of the chiton Cyanoplax hartwegii (Mollusca: Polyplacophora)1974
8hms_jh784kt2099.tei.xmlBiochemical, population genetics, migration, and gene flow in a central California barnacle population1990
9hms_rr729zy4959.tei.xmlNitric oxide promotes while cholinergic agonist and cyclic GMP inhibit neurite outgrowth of N1E-115 mouse neuroblastoma cells1997
10usc_1971_Coyer.tei.xmlUnknownUnknown
11fhl_2011_Katagi_26641.tei.xmlMolecular and Physical Relationships among Individuals in a Phoronis vancouverensis Clump2011
12hms_nf845vn5640.tei.xmlChemoreception in Myxicola infundibulum1976
13hms_dj224jp8743.tei.xmlA behavioral light response in the chiton Stenoplax heathiana1974
14hms_dg065yp0282.tei.xmlIsolation of the small circular DNA from the brain of the Senorita, Oxyjulis californicus1989
15hms_sp871qz0159.tei.xmlBisphenol A causes disruptions in the cell cycle of the zygotes and embryos of the purple sea urchin, Strongylocentrotus purpuratus2004
16hms_mc205gr4125.tei.xmlCalcium and magnesium flux via TRPM72005
17hms_bt919wt2928.tei.xmlA comparative morphology of male reproductive structures in some California isopods1973
18hms_gz293yq4738.tei.xmlCertain aspects of the respiration rate of the cirratulid polychaete, Cirriformia spirabrancha (Moore, 1904)1968
19hms_kf764wh3371.tei.xmlNatural levels of DDE and the uptake of C14-DDT by different size classes of the mussel Mytilus californianus (Conrad, 1837)1969
20hms_wd131gs1203.tei.xmlAn analysis of the endogenous rhythms in jumping activity in an intertidal collembolid population on the central California coast1978
21hms_cr507tx4660.tei.xmlInfestation of the sandy beach amphipod Orchestoidea corniculata by the mite Gammaridacarus brevisternalis (Laelaptidae)1972
22usc_1991_Sp_Western.tei.xmlUnknownUnknown
23hms_wk582vj1460.tei.xmlHatching in Ascidia ceratodes and evidence for a hatching enzyme1981
24fhl_2014_Harrison_27260.tei.xmlThe Affect of Ontogeny on Structure and Function of Preopercular Spines in Myoxocephalus polyacanthocephalus2014
25hms_zn059pq7833.tei.xmlCeramide disrupts sperm motility and inhibits fertilization in the purple sea urchin, Strongylocentrotus purpuratus1997
26fhl_2012_Rincón_27074.tei.xmlHigh potential imaging technology for analysis of in situ patchiness2012
27usc_1992_Sp_Gala.tei.xmlUnknownUnknown
28hms_yr619fq5792.tei.xmlEffects of DDT on action potential discharge in the nerves of the sand crab, Emerita analoga (Simpson)1971
29hms_bc922nf3500.tei.xmlObservations on the sequence of events in the rejection reaction in Botryllus oozooids1981
30hms_kw682ny3339.tei.xmlAttrition on the Littorina planaxis population1964
31fhl_2014_Harrison_34580.tei.xmlThe Affect of Ontogeny on Structure and Function of Preopercular Spines in Myoxocephalus polyacanthocephalus2014
32ucla_1978_IstrinJosef_Mpyrifera.tei.xmlUnknownUnknown
33hms_pw250vx5757.tei.xmlAn investigation of DDT degradation in the starfish, sea urchin, and mussel1969
34hms_bq417jb6307.tei.xmlEndogenous rhythmicity of vertical migration in a meiofaunal population of the intertidal collembolan Archistoma besselsi (Arthropoda: Insecta)1978
35ucla_1983_McClainRichard.tei.xmlUnknownUnknown
36hms_kp642sx7055.tei.xmlThe presence of multi-xenobiotic resistance in marine invertebrates1968
37hms_nh762pm8735.tei.xmlStochastic modeling of spontaneous behavior in Melibe Leonina1991
38hms_gg654sv7833.tei.xmlThe role of serotonin in early development of the sea urchin Strongylocentrotus purpuratus1964
39hms_bn022ny6724.tei.xmlHabitat, general behavior, nest building, and brooding in the littoral pseudoscorpion, Garypus californicus Banks (psuedoscorpionida-garypidae)1982
40usc_1994_Sp_Muche.tei.xmlUnknownUnknown
41hms_rp459vq0562.tei.xmlMorphological, taxonomic and distributional differences between three sand-lobed colonial ascidians (Aplidium arenatum, P. prpoinquum, and Synoicum parfustis) in Monterey Bay1981
42ucla_1981_WuestehubeLindaJ.tei.xmlUnknownUnknown
43hms_jw275hp6525.tei.xmlThe essence of senescence1990
44hms_pn523dm5752.tei.xmlThe distribution and effects of the lichen Arthopyrenia sublitoralis on the shell of the limpet Collisella digitalis1970
45hms_vf662dy4113.tei.xmlIdentification and location of carbohydrases in the intestinal tract of Tegula funebralis1963
46ucla_1989_ArnoldKristian.tei.xmlUnknownUnknown
47hms_bq304yh4574.tei.xmlpH-dependence and mechanism of tityustoxin block of SqKv1A K+ channels1999
48usc_1976_Su_Boudreau.tei.xmlUnknownUnknown
49hms_kx968qb7249.tei.xmlSome factors of mortality in laboratory populations of Pagurus samuelis (Stimpson) (Arthropoda: Decapoda)1965
50usc_1990_V2_Chavez.tei.xmlUnknownUnknown
51fhl_2011_Johnson_26572.tei.xmlLiving with Wildlife: Human impact on wildlife and the role of education in the San Juan Islands, Washington2011
52hms_yc784fg0437.tei.xmlDifferential mortality to salinity stress and its relation to sex ratios in the marine copepod, Tigriopus californicus1977
53hms_dp408wm2606.tei.xmlExternal acidic pH causes metaphase arrest and inhibits histone H1 kinase inactivation in the sea urchin embryo1991
54hms_gj880nt8767.tei.xmlRegulation of bag cell growth in Aplysia californica: effects of ELH and alpha-BCP1988
55fhl_2019_Benko_46666.tei.xmlLocomotory behavior of competent cyphonautes larvae in response to positive and negative cues in flow2019
56hms_vw444qv6816.tei.xmlNatural heartbeat patterns of six ascidians and environmental effects on cardiac function in Clavelina huntsmani1981
57fhl_2015_Roberts_34665.tei.xmlFeeding Mechanics and Functional Morphology in the Jaws of Sculpins2015
58hms_km939dh0573.tei.xmlLittorina trail following; sexual preference, loss of polarized information, and trail alterations1982
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "group_detail(clusters24, 20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "documentary-tactics", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.1" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}
NumberFile NameTitleYear
1fhl_2014_Ng_27297.tei.xmlThe hydrodynamic costs of spination in zoea2014
2hms_dv501gt7916.tei.xmlA comparison of carbohydrate digestion capabilities in four species of Acmaeas (Mollusca: Gastropoda: Prosobranchia)1966
3hms_fp662gc4663.tei.xmlA comparative electrophoretic study of the blood proteins of the cirripede, Balanus nubilis (Darwin, 1854), vertebrate hemoglobin and molluscan and arthropod hemocyanins1967
4hms_yx237cc7402.tei.xmlDiurnal patterns of ammonia release in marine and terrestrial isopods1973
5hms_gk778my8810.tei.xmlNitrogen excretory products in the limit Acmaea (Mollusca: Gastropoda: Prosobranchia)1966
6hms_mk064dg8527.tei.xmlElectrophoretic variation in enzymes of Sebastes paucispinis and Sebastes goodei1989
7fhl_2014_Ng_34651.tei.xmlThe hydrodynamic costs of spination in zoea2014
8ucla_1981_VogelSteve.tei.xmlUnknownUnknown
9hms_cy348kc3163.tei.xmlCarbohydrases in two species of littorines1964
10usc_1992_Sp_Gampel.tei.xmlUnknownUnknown
11ucla_1983_StreifingerConnie.tei.xmlUnknownUnknown
12usc_1970_Woollacoot.tei.xmlUnknownUnknown
13hms_gv579hx3954.tei.xmlFeeding, regeneration, and colony formation in the polychaete Phyllochaetopterus prolifica (Chaetopteridae)1976
14hms_xs818vt1042.tei.xmlExcretion of free amino acids by the barnacle Balanus glandula1967
15fhl_2012_Garcia_27059.tei.xmlCoccolith Conundrum: How shape affects sinking and light acquisition2012
16hms_jj612gh5607.tei.xmlActivities of several pentose shunt and glycolytic enzymes in developing eggs of the barnacle Pollicipes polymerus1967
17hms_sm915yx0709.tei.xmlFeeding activities of Tegula funebralis1963
18hms_cz809wv9170.tei.xmlA comparison of the digestive carbohydrases in the terrestrial isopod, Armadillidium vulgare (Stimpson, 1857), and in the marine isopod, Idothea resecata (Latreille, 1804)1973
19hms_nj806hk2317.tei.xmlLaminarinase and hexokinase activity during embryonic development of Acmaea scutum (Mollusca: Gastropoda)1966
20usc_1993_Sp_Alig.tei.xmlUnknownUnknown
21hms_rh743gf5542.tei.xmlThe kinetics of DDT residues in the nudibranch Hermissenda crassicornis1975
22hms_wd766yq1443.tei.xmlThe glycogen content and preliminary studies of glycogen synthesis in tissues of Pagurus samuelis (Stimpson, 1862) (Arthropoda: Malacostraca)1964
23hms_vz659pn5301.tei.xmlThe blood pigment of the Polychaete annelid Cirriformia spirabancha (Moore, 1904)1976
24ucla_1989_EllisErik.tei.xmlUnknownUnknown
25ucla_1989_BaghdasarianGaren.tei.xmlUnknownUnknown
26hms_vr582hy6559.tei.xmlLarvae and pupae of the wrack dipterans Coelopa vanduzeei (Coelopidae), Fucellia costalis and F. rufitibia (Anthomyiidae), and Leptocera johnsoni (Spaeroceridae) on a California beach1972
27usc_1993_Sp_Davis.tei.xmlUnknownUnknown
28hms_yn828sk0354.tei.xmlTransport and incorporation of amino acids in Notoacmea incessa1987
29hms_kd314mc7120.tei.xmlShort term response of LDH activity to hypoxia in Fundulus heteroclitus1995
30usc_1991_Sp_Hentschke.tei.xmlUnknownUnknown
31ucla_1975_ChapmanJohn_Asculpta.tei.xmlUnknownUnknown
32usc_1993_Sp_Peneguy.tei.xmlUnknownUnknown
33hms_bv865bm7524.tei.xmlNitrogenous excretion of selected polychaetes1977
34hms_cs158tm5329.tei.xmlInhibition of Photosynthesis in Porphyra perforata by Trace Metals1971
35hms_vr484jz4546.tei.xmlAn experimental exploration of mechanics of food movement in the digestive system of the omnivorous marine isopod Idotea resecata1973
36hms_bs155nx6248.tei.xmlNitrogenous waste products and excretory enzymes in the marine polychaete Cirriformia spirabrancha (Moore, 1904)1968
37hms_dq995jh3669.tei.xmlInhibition of carbonic anhydrase by DDT and DDE1969
38hms_mn321mm7225.tei.xmlUptake of C14O2 and C14-glycine by zooxanthellae and Anthopleura elegantissima1969
39ucla_1988_WylieTodd.tei.xmlUnknownUnknown
40usc_1971_Roseland.tei.xmlUnknownUnknown
41hms_nw478jm4468.tei.xmlAn investigation of the effects of glycerol on oxygen consumption by the sea anemone Anthopleura xanthogrammica1975
42fhl_2012_Walkowicz_27061.tei.xmlKeeping A Flow Profile: The Fluid Dynamics and Biomechanics of Trilobite Genal Spines2012
43hms_md075rk2206.tei.xmlDigestive carbohyrases of Balanus nubilis (Darwin, 1854)1967
44hms_cz995jf1615.tei.xmlThe pathways of nitrogen excretion in Littorina planaxis1977
45hms_qb327rb2863.tei.xmlA study of the peritrophic membrane of the barnacles Balanus nubilis (Darwin, 1854), Balanus tintinnabulum (Linnaeus, 1758), Tetraclita squamosa rubescens (Darwin, 1854)1967
46hms_py511jz8104.tei.xmlThe cloning and sequencing of UBCT1, the Tigriopus californicus homologue of the yeast UBC4 and UBC5 gene1989
47hms_kn589vc9260.tei.xmlActivity patterns in Pagurus samuelis and Pagurus granosimanus: I. Dispersion1965
48hms_cc132kv2653.tei.xmlA protein comparison between aposymbiotic and symbiotic Anthopleura elegantissima1994
49hms_jy310nk7292.tei.xmlMacromolecular crowding: effects on MDH stability and LDH kinetics1999
50usc_1990_V2_Chu.tei.xmlUnknownUnknown
51hms_nc297kc1752.tei.xmlInfection mechanism and relationship of the parasitic red alga, Erythrocystis saccata (Ceramiales, rhodomelaceae) to its host1980
52hms_fy246vw6211.tei.xmlCharacteristics of larval and postlarval stages for Pagurus in Monterey Bay, California1965
53hms_ch792bx6307.tei.xmlNitrogenous material released from Mopalia muscosa (Gould, 1846), and intertidal chiton1975