为什么一个特殊字符会导致R函数删除搜索字符串的组成部分?

avkwfej4  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(102)

我正在使用R包'easyPubMed'来调查物种和研究工作(即这些物种的数量。通常,我可以使用函数get_pubmed_ids(“example string[TI]”)从NCBI数据库返回关于有多少出版物在标题中包含“example string”的信息。
不过,我发现了一个奇怪的效果。当我试图在get_pubmed_ids()中输入特定的物种名称时,如果物种名称中有破折号或撇号,则会出现单词丢失的情况。例如,如果我想搜索关于茶色胸Tinamou的出版物,我输入以下内容:
get_pubmed_ids(“Tawny-breasted Tinamou[TI]”)
我注意到我得到了一组奇怪的结果。我注意到这一点是因为多种类型的Tinamou物种都返回了31篇出版物。我调查了返回的信息并隔离了问题,但无法找到解决方案。具体来说,该函数接受带有特殊字符的物种名称:
$OriginalQuery[1]“Tawny-breasted+Tinamou[TI]”
但是,该函数似乎修改了文本,因为“查询翻译”显示以下内容:$QueryTranslation[1]““Tinamou”[标题]”
没有特殊字符的物种名称(例如Common Raven)没有此错误。当我在NCBI数据库的网络浏览器中搜索“茶色胸Tinamou[TI]”时,它似乎起作用了。
如果有人对字符串中的特定字符导致函数删除部分物种名称有建议或潜在的解释,我会非常感兴趣。
谢谢你。
我已经尝试在原始数据库中搜索,以确保搜索字符串将工作的整体,没有成功。我还尝试使用转义斜线修改字符,以便它们可能被识别为特殊字符,但这似乎不起作用。但是我不确定我是否正确地使用了转义斜线。总而言之,我尝试让R函数使用正确的搜索字符串,但没有成功。

mspsb9vt

mspsb9vt1#

我觉得这是NCBI那边的。R代码对字符串没有做任何奇怪的事情,如果您直接搜索NCBI网站,您会看到相同的结果。
如果您查看查询返回的XML,它会显示有关NCBI在幕后所做工作的更多细节:
当您搜索common raven[TI]时:https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=Common+Raven[TI]
你可以看到这个查询被翻译成:
<QueryTranslation>"common raven"[Title]</QueryTranslation>
它将整个短语放在引号中,并知道整个事情应该是一个标题。
当您搜索Tawny-breasted Tinamou[TI]时:https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=Tawny-breasted+Tinamou[TI]

<QueryTranslation>"Tinamou"[Title]</QueryTranslation>
<ErrorList>
 <PhraseNotFound>Tawny-breasted</PhraseNotFound>
</ErrorList>

因此,它不会将查询放在引号中,而是将其视为两个独立的搜索词:“黄胸”和“Tinamou[TI]”由于“Tawny-breasted”没有返回任何结果,因此它被丢弃,只搜索“Tinamou”[Title]。
如果你想正确地搜索整个术语,你需要自己添加引号,如下所示:

get_pubmed_ids('"Tawny-breasted Tinamou"[TI]')
$Count
[1] "0"

$RetMax
[1] "0"

$RetStart
[1] "0"

$QueryKey
[1] "1"

$WebEnv
[1] "MCID_648b50fadd6389294158ec04"

$QueryTranslation
[1] "\"Tawny-breasted Tinamou\"[TI]"

$IdList
named list()

$TranslationSet
list()

$OriginalQuery
[1] "\"Tawny-breasted+Tinamou\"[TI]"

请注意,您需要使用双引号("),因此字符串需要像上面一样用单引号括起来,或者您需要用\转义内引号:

get_pubmed_ids("\"Tawny-breasted Tinamou\"[TI]")

相关问题