首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找字符串中特定单词的位置

查找字符串中特定单词的位置
EN

Stack Overflow用户
提问于 2019-01-04 23:41:33
回答 2查看 128关注 0票数 0

我有一个基因列表,我需要识别列表中的基因是否存在于‘文章标题’中,如果存在,请找到句子中基因的开始和结束位置。

开发的代码确实识别了基因,并检测了基因在句子中的位置。然而,我需要帮助找到基因的起始位置和结束位置。

代码语言:javascript
运行
复制
doc = tree.getroot()
 for ArticleTitle in doc.iter('ArticleTitle'):
    file1 = (ET.tostring(ArticleTitle, encoding='utf8').decode('utf8'))
    filename = file1[52:(len(file1))]
    Article= filename.split("<")[0]
    # print(Article)
    # print(type(Article))
    title= Article.split()
    gene_list = ["ABCD1","ADA","ALDOB","APC","ARSB","ATAD3B","AXIN2","BLM","BMPR1A","BRAF","BRCA1"] 
    for item in title:
        for item1 in gene_list:
            if item == item1:
                str_title= ' '.join(title)
                print(str_title)
                print("Gene Found: " + item)
                index= title.index(item)
                print("Index of the Gene :" +str(index))

                result = 0
                for char in str_title:
                    result +=1
                print(result)

当前输出为:

代码语言:javascript
运行
复制
Healthy people 2000: a call to action for ADA members.
Gene Found: ADA
Index of the Gene :8
54

预期输出为:

代码语言:javascript
运行
复制
Healthy people 2000: a call to action for ADA members.
Gene Found: ADA
Index of the Gene :8
Gene start position: 42
Gene End postion:  45

开始和结束位置也应该计算单词之间的空格。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-05 00:06:28

可以使用正则表达式

代码语言:javascript
运行
复制
l=["ABCD1","ADA","ALDOB","APC","ARSB"]
l='|'.join(l)
test_string='Healthy people 2000: a call to action for ADA members.'
pos=0
for i in test_string.split():
    m=re.search(l,i)
    if m:
        gene=m.group(0)
        start=test_string.find(gene)
        end=start+len(gene)
        print(start,end,gene,pos)
    pos+=1

输出

代码语言:javascript
运行
复制
(42, 45, 'ADA', 8)

没有字符串中实际位置的较短的解决方案可能是

代码语言:javascript
运行
复制
l=["ABCD1","ADA","ALDOB","APC","ARSB"]
l='|'.join(l)
test_string='Healthy people 2000: a call to action for ADA members.'

[(m.start(),m.group(0),m.end()) for m in re.finditer(l,test_string)]
票数 1
EN

Stack Overflow用户

发布于 2019-04-20 15:12:52

我们也可以使用Flashtext

代码语言:javascript
运行
复制
from flashtext import KeywordProcessor

kpo = KeywordProcessor(case_sensitive=True)

gene_list = ["ABCD1","ADA","ALDOB","APC","ARSB","ATAD3B","AXIN2","BLM","BMPR1A","BRAF","BRCA1"] 

for word in gene_list:
    kpo.add_keyword(word)

kpo.extract_keywords("Healthy people 2000: a call to action for ADA members.",span_info=True)
#o/p --> [('ADA', 42, 45)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54042050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档