-1

我有一个数据库,其中有 3 列(id、name、info_link)。

我将id名称存储在数据库中。

我有一个文本文件,其中所有信息链接都被刮掉了。

信息链接的形式为:http://someURL/**Name**.htm

现在我要做的是从数据库中取一个名称,从链接的文本文件中读取一行,查找链接(行)是否包含该药物名称,将该链接放在记录的 info_link 列中。

这就是我的代码

BufferedReader reader = new BufferedReader(new FileReader("./Links.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("./AddedLinks.txt"));
int id = 1;
//Creates a connection to the Database
connection = DriverManager.getConnection(DB_URL,DB_USER,DB_PASS);

statement = connection.createStatement();
for(id=1;id<=1153;)
{   
   query = statement.executeQuery("SELECT name FROM drug_list WHERE id = '"+id+"';");
   query.next();
   String name = query.getString(1);
   String words[] = name.split(" ");
   String Myvalue = reader.readLine();
   boolean Found = false;
   while(!Found)
      if(Myvalue.toLowerCase().contains(words[0].toLowerCase()))
      {
         Boolean f = false;
         System.out.println("Found"+name);
         update = connection.prepareStatement("UPDATE drug_list SET info_link = ? WHERE id = ?;");
         update.setString(1, Myvalue);
         update.setInt(2, id);
         f = update.execute();
         if(!f)
         {
            System.out.println("QSE");
            id++;
            writer.write(Myvalue);
            Found = true;
         }

      }
      else
      {
         System.out.println("Could Not Find"+name+"\n");
         id++;
         Found = false;
      }
}

我能够匹配必须在单字上处理的容器链接。但问题是

我有一个像这样的药物名称

  • 沙丁胺醇(沙丁胺醇)
  • 多佐胺/噻吗洛尔

ETC..

以及他们的相应链接,例如:

 - http://Somelink/**albuterol_salbutamol**.htm
 - http://Somelink/**dorzolamide_timolol**.htm

数据库中还有一些名称在文本文件中没有相应的链接,我也想跳过这些。我的数据库中总共有 1153 个值。

我也有一些药物名称,例如

  • 钙的东西
  • 钙 东西 东西
  • 钙不是什么

因此,如果我仅匹配我拆分的单词 [0],则会产生问题。因为它只会更新 Calcium Something Field 的所有值。

4

2 回答 2

1

您使用正则表达式来拆分单词。就像是

String words[] = a.split("[/()]");

并迭代并检查所有单词,而不仅仅是一个单词。

于 2012-12-08T09:16:49.373 回答
0

好的,这就是我要做的:遍历您的姓名并使用带有空格的 split() 作为分隔符来获取数组中的每个单词。然后,对于每个链接,获取从最后一个破折号到“.htm”的子字符串(当然,取决于链接的设置方式。您也可以跳过此步骤)。然后,在该字符串上,检查名称数组中的每个项目是否包含在链接中。为每个匹配计算一个整数值,并将其与链接一起保存,例如在数组、HashMap 等中(或者仅将匹配最多的链接保留在变量中,如果您找到匹配更高的链接,则可以更新) . 最后,选择匹配最多的链接。

目前,如果我没看错,您已经在拆分,但您只使用该数组的第一个值。

当然,这不是万无一失的,但这是我能想到的最好的了。如果您想排除任何错误,您将不得不手动检查结果。

于 2012-12-08T09:03:26.853 回答