aboutsummaryrefslogtreecommitdiff
path: root/topGene_step1_cnt_abstracts.py
blob: 420c9cf3982d8379a8e892d25cc279715862d503 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/bin/env python3 
import os
import sys
import re
import time
from ratspub_keywords import *

def undic(dic):
    return "|".join(dic.values())

def gene_addiction_cnt(gene):
    time.sleep(0.2)
    q="\'(\"" + addiction.replace("|", "\"[tiab] OR \"")  + "\") AND (\"" + drug.replace("|", "\"[tiab] OR \"", ) + "\") AND (\"" + gene + "\")\'"
    count=os.popen('esearch -db pubmed  -query ' + q + ' | xtract -pattern ENTREZ_DIRECT -element Count ').read()
    if (len(count)==0):
        print("pause")
        time.sleep(15)
        return gene_addiction_cnt(gene)
    else:
        return (count)

def removeStopWords(terms):
    out=str()
    for one in terms.upper().split("|"):
       if one not in stopWords:
            out+="|"+one
    return(out[1:])

def saveStopWord(w):
    with open (stopword_f,"a") as swf:
        swf.write(w+"\n")
    return

# either start with ncbi_gene_symb_syno_name_txid9606 for fresh new counts
# or recount the results after adding additional stopwords

if len(sys.argv)==2:
    input_f=sys.argv[1]
else:
    input_f="./ncbi_gene_symb_syno_name_txid9606.txt"

addiction=undic(addiction_d)
drug=undic(drug_d)
output_f=input_f.replace(".txt","_absCnt.txt")
out=open(output_f, "w+")

stopword_f="./stop_words_addiction_gene_search.txt"
with open (stopword_f, "r") as swf:
    stopWords=swf.read().upper().split("\n")
    swf.close()

with open (input_f, "r") as f:
    for line in f:
        do_search=0
        inputline=line
        line=line.replace("-","\ ")
        # remove the annotated stopword
        if "'" in line:
            do_search=1
            words=line.split("|")
            line=str()
            for word in words:
                # ' is used to mark/annotate a word is a stop word in the results
                # remove the ' mark 
                if "'" in word:
                    word=word.replace("'","")
                    stopWords.append(word)
                    saveStopWord(word)
                line+="|"+word
            line=line[1:]
        line=removeStopWords(line)
        # tab is added if there are abstracts counts
        if "\t" in line:
            (gene, count)=line.split("\t")
            # rerun if count is low, these are less annotated
        #    if int(count)<50:
        #        do_search=1
        else:
            #no count, 
            gene=line.strip()
            do_search=1
        if do_search==1:
            # remove synonyms with only two letters
            if "|" in gene:
                synos=gene.split("|")
                # keep the gene name regardless number of characters
                gene=synos[0]
                #print ("gene: "+gene + " synos -->" + str(synos[1:]))
                for syno in synos[1:]:
                    #synonyms must be at least 3 characters
                    if len(syno)>3:
                        gene+="|"+syno
            gene_q=gene.replace("|", "\"[tiab] OR \"")
            gene_q+="[tiab]"
            count=gene_addiction_cnt(gene_q)
            print("original line->\t"+inputline.strip())
            print("stopword rmed->\t"+line.strip())
            print("final  result->\t"+gene+"\t"+count)
            out.write(gene+"\t"+count)
        else:
            print("original resl->\t"+inputline.strip())
            out.write(inputline)

sorted_f=output_f.replace(".txt","_sorted.txt")
os.system("sort -k2 -t$'\t' -rn " + output_f + " > " + sorted_f )