關鍵詞抽取演算法
① 簡訊關鍵字過濾演算法有哪些
bool CKeyWordManager::find(const std::string &key){ for (int n = 0; n < key.length (); ++n) { for (int i = 1; i < m_keyWordMaxLength && i + n < key.length (); ++i) { set <string>::iterator it = m_keWordList.find (key.substr (n, i)); if (it != m_keyWordList.end ()) return true; } } return false;}
② simhash 怎麼把關鍵字變為二進制
原理
simhash值的生成圖解如下
大概花三分鍾看懂這個圖就差不多怎麼實現這個simhash演算法了。特別簡單。谷歌出品嘛,簡單實用。
演算法過程大概如下:
將Doc進行關鍵詞抽取(其中包括分詞和計算權重),抽取出n個(關鍵詞,權重)對, 即圖中的(feature, weight)們。 記為 feature_weight_pairs = [fw1, fw2 … fwn],其中 fwn = (feature_n,weight_n`)。
hash_weight_pairs = [ (hash(feature), weight) for feature, weight infeature_weight_pairs ] 生成圖中的(hash,weight)們, 此時假設hash生成的位數bits_count = 6(如圖);
然後對 hash_weight_pairs 進行位的縱向累加,如果該位是1,則+weight,如果是0,則-weight,最後生成bits_count個數字,如圖所示是[13, 108, -22, -5, -32, 55], 這里產生的值和hash函數所用的演算法相關。
[13,108,-22,-5,-32,55] -> 110001這個就很簡單啦,正1負0。
到此,如何從一個doc到一個simhash值的過程已經講明白了。 但是還有一個重要的部分沒講,
『simhash值的海明距離計算』
二進制串A 和 二進制串B 的海明距離 就是
③ 如何通過聚類或其他演算法實現一組名詞的抽象,也可以說是關鍵詞的提取
public class Main_UI4 {
private static String[] names=new String[]{"組織機構代碼","公司代碼","學校代碼","車輛牌照","公司牌照","學生姓名","道路運政"};
public void fun(String xname){
System.out.println(xname+":");
for(String name:names){
if(name.indexOf(xname)>0){
System.out.print(name+"\t");
}
}
System.out.println();
}
public static void main(String[] args) {
new Main_UI4().fun("代碼");
new Main_UI4().fun("牌照");
}
}
④ 「關鍵詞」提取都有哪些方案
僅從詞語角度分析,1.2句banana是重復出現的,3.4句kitten是重復出現的。但其實可以發現1.2句主要跟食物有關,3.4句主要跟動物有關,而food、animal兩個詞在四句話里均未出現,有沒有可能判斷出四句話中所包含的兩個主題呢,或者當兩篇文章共有的高頻詞很少,如一篇講banana,一篇講orange,是否可以判斷兩篇文章都包含food這個主題呢,如何生成主題、如何分析文章的主題,這就是topic-model所研究的內容。對文本進行LSA(隱形語義分析)。在直接對詞頻進行分析的研究中,可以認為通過詞語來描述文章,即一層的傳遞關系。而topic-model則認為文章是由主題組成,文章中的詞,是以一定概率從主題中選取的。不同的主題下,詞語出現的概率分布是不同的。比如」魚雷「一詞,在」軍事「主題下出現的概率遠大於在」食品」主題下出現的概率。即topic-model認為文檔和詞語之間還有一層關系。首先假設每篇文章只有一個主題z,則對於文章中的詞w,是根據在z主題下的概率分布p(w|z)生成的。則在已經選定主題的前提下,整篇文檔產生的概率是而這種對每篇文章只有一個主題的假設顯然是不合理的,事實上每篇文章可能有多個主題,即主題的選擇也是服從某概率分布p(t)的因此根據LDA模型,所有變數的聯合分布為表示topic下詞的分布,表示文檔下topic的分布。是第m個文檔的單詞總數。和表示詞語和topic的概率分布先驗參數。而學習LDA的過程,就是通過觀察到的文檔集合,學習的過程。
⑤ seo中提取關鍵字,怎麼去分析
記住一個概念:四處一詞
如何讓搜索引擎知道你這個頁面的關鍵詞是哪個呢?從四個地方:
第一處:當前頁面的標題上出現這個關鍵詞;
第二處:當前頁面關鍵詞標簽、描述標簽里出現這個關鍵詞(如果是英文關鍵詞,請在URL里也出現);
第三處:當前頁面的內容里,多次出現這個關鍵詞,並在第一次出現時,加粗;
第四處:其他頁面的錨文本里,出現這個關鍵詞(內鏈和外鏈)。
⑥ simhash中如何抽取文本關鍵字及權重
傳統的Hash演算法只負責將原始內容盡量均勻隨機地映射為一個簽名值,原理上僅相當於偽隨機數產生演算法。傳統的hash演算法產生的兩個簽名,如果原始內容在一定概率下是相等的;如果不相等,除了說明原始內容不相等外,不再提供任何信息,因為即使原始內容只相差一個位元組,所產生的簽名也很可能差別很大。所以傳統的Hash是無法在簽名的維度上來衡量原內容的相似度,而SimHash本身屬於一種局部敏感哈希演算法,它產生的hash簽名在一定程度上可以表徵原內容的相似度。
⑦ 根據關鍵詞檢索論文用什麼推薦演算法最合適
必須在Ei Compendex 資料庫中進行檢索。
第一步:選擇檢索欄位為「Subject/Title/Abstract」;
第二步:在檢索框中輸入關鍵詞,點擊「Search」按鈕,得到檢索結果;
第三步:在檢索結果頁面左欄點擊「Country」,選擇「China」,在左欄上方點擊「Limit to」按鈕,得到中國人發表的論文;
第四步:在檢索結果左欄下方點擊「Source Title」按鈕,查看中國人習慣發表適合你的關鍵詞的期刊。
如果需要進一步了解這些期刊的信息,可在「谷歌」中搜索。也可在「雅虎」中搜索。
⑧ 怎麼在一堆圖片中抓取關鍵詞
可以用抽取方法。
有監督無監督抽取方法:無監督關鍵詞提取方法主要有三類:基於統計特徵的關鍵詞提取(TF,TF-IDF);基於詞圖模型的關鍵詞提取(PageRank,TextRank);基於主題模型的關鍵詞提取(LDA)基於統計特徵的關鍵詞提取演算法的思想是利用文檔中詞語的統計信息抽取文檔的關鍵詞;基於詞圖模型的關鍵詞提取首先要構建文檔的語言網路圖,然後對語言進行網路圖分析,在這個圖上尋找具有重要作用的詞或者短語,這些短語就是文檔的關鍵詞;基於主題關鍵詞提取演算法主要利用的是主題模型中關於主題分布的性質進行關鍵詞提取;
將關鍵詞抽取過程視為二分類問題,先提取出候選詞,然後對於每個候選詞劃定標簽,要麼是關鍵詞,要麼不是關鍵詞,然後訓練關鍵詞抽取分類器。當新來一篇文檔時,提取出所有的候選詞,然後利用訓練好的關鍵詞提取分類器,對各個候選詞進行分類,最終將標簽為關鍵詞的候選詞作為關鍵詞。
⑨ 把測試集里的文本用tfidf演算法提取出關鍵詞,求個java代碼
//直接粘貼就行。
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.border.EtchedBorder;
import javax.swing.filechooser.FileFilter;
public class Application2 extends JFrame implements Cloneable{
public Application2(){
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(800,700);
this.setLayout(new BorderLayout());
keyWords1=new String[]{"那麼","還是","sdf"};
keyWords2=new String[]{"所以","而且",};
input=new JTextArea();
JPanel ip=new JPanel();
ip.setLayout(new BorderLayout());
ip.add(input,BorderLayout.CENTER);
ip.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "輸入文本"));
output1=new JTextArea();
JPanel o1p=new JPanel();
o1p.setLayout(new BorderLayout());
o1p.add(output1,BorderLayout.CENTER);
o1p.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "以下為"));
output2=new JTextArea();
JPanel o2p=new JPanel();
o2p.setLayout(new BorderLayout());
o2p.add(output2,BorderLayout.CENTER);
o2p.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "以下為"));
JSplitPane split1=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,o1p,o2p);
split1.setDividerLocation(350);
JSplitPane split2=new JSplitPane(JSplitPane.VERTICAL_SPLIT,ip,split1);
split2.setDividerLocation(300);
this.add(split2,BorderLayout.CENTER);
open=new JButton("導入");
open.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser=new JFileChooser(".");
chooser.setMultiSelectionEnabled(false);
chooser.addChoosableFileFilter(new FileFilter(){
@Override
public boolean accept(File file) {
if(file.isDirectory())
return true;
int length=file.getName().length();
if(length<5)
return false;
if(file.getName().substring(length-4).equals(".txt"))
return true;
return false;
}
@Override
public String getDescription() {
return "文本文件";
}
});
chooser.showOpenDialog(Application2.this);
File file=chooser.getSelectedFile();
if(file==null)
return;
try {
Scanner sc=new Scanner(file);
String text="";
while(sc.hasNextLine())
text+=sc.nextLine()+"\n";
input.setText(text);
String[] array=getSentences();
output1.setText(getKeySentences(keyWords1,array));
output2.setText(getKeySentences(keyWords2,array));
}catch (IOException e1) {
e1.printStackTrace();
}
}
});
save=new JButton("導出");
save.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JFileChooser chooser=new JFileChooser(".");
chooser.setMultiSelectionEnabled(false);
chooser.addChoosableFileFilter(new FileFilter(){
@Override
public boolean accept(File file) {
if(file.isDirectory())
return true;
int length=file.getName().length();
if(length<5)
return false;
if(file.getName().substring(length-4).equals(".txt"))
return true;
return false;
}
@Override
public String getDescription() {
return "文本文件";
}
});
chooser.showSaveDialog(Application2.this);
File file=chooser.getSelectedFile();
if(file==null)
return;
try {
PrintWriter pw=new PrintWriter(file);
pw.print(output1.getText());
pw.flush();
pw.print(output2.getText());
pw.flush();
}catch (IOException e1) {
e1.printStackTrace();
}
}
});
JPanel buttonPane=new JPanel();
buttonPane.add(open);
buttonPane.add(save);
this.add(buttonPane,BorderLayout.SOUTH);
}
public String[] getSentences(){
ArrayList<String> set=new ArrayList<String>();
int length=input.getText().length();
for(int i=0,last=0;i<length;i++){
String s=String.valueOf(input.getText().charAt(i));
if(s.equals("\n"))
last=i+1;
if(s.equals(".")||s.equals(",")||s.equals("。")||s.equals("。")||s.equals("!")||s.equals("?")||s.equals("?")||s.equals("!")||s.equals(",")){
set.add(input.getText().substring(last,i)+s);
last=i+1;
}
}
return set.<String>toArray(new String[set.size()]);
}
public String getKeySentences(String[] key,String[] sentences){
String result="";
A: for(int i=0;i<sentences.length;i++){
for (int k = 0; k < key.length; k++)
if (sentences[i].contains(key[k].subSequence(0, key[k].length()))) {
result += sentences[i] + "\n";
continue A;
}
}
return result;
}
private JTextArea input;
private JTextArea output1;
private JTextArea output2;
private JButton open;
private JButton save;
private String[] keyWords1;
private String[] keyWords2;
public static void main(String... args){
EventQueue.invokeLater(new Runnable(){
public void run(){
new Application2().setVisible(true);
}
});
}
}
⑩ 全文檢索演算法,請問誰能給我點頭緒落,不懂啊。。
全文檢索技術
全文檢索是指索引程序掃描文章中的每個詞並建立對應索引,記錄該詞出現的位置和次數。當通過搜索引擎查詢時,檢索程序就在記錄的索引進行查找並返回給用戶。全文檢索又分為基於字的全文索引和基於詞的全文索引。基於字的全文索引會對內容中的每個字建立索引並記錄,此方法查全率高,但查准率低,特別是對於中文,有時搜索馬克,會列出馬克思的結果。基於詞的全文索引是把一個詞語作為一個單位進行索引記錄,並能處理同義詞。搜索引擎有自己的詞庫,當用戶搜索時,搜索引擎會從詞庫中抽取關鍵詞作為索引項,這樣可以大大提高檢索的准確率。
中文分詞技術
一直以來大家都比較熟悉網路,網路有自己的中文分詞技術。一般採用的包括正向最大匹配,反向最大匹配,最佳匹配法,專家系統方法等。其中最大正向匹配是最常用的分詞解決方案,它採用機械式演算法,通過建立詞典並進行正向最大匹配對中文進行分詞。舉個簡單的例子比如搜索「北京大學在哪裡」,則返回結果很多都是包含北京大學,北大等詞語的網頁,搜索引擎就是採用正向最大匹配去判斷,把北京大學當做一個詞語來索引記錄並返回。當然,正向最大匹配也有不完整性,比如長度過長的詞語,搜索引擎有時無法准確的分詞,或者對前後都相互關聯的詞無法准確分詞。例如「結合成分子時」,會被返回結合、成分、子時,而有時我們想要的關鍵詞是「分子」。
很多時候網路都會根據自己詞庫中詞語的權重進行拆分,權重的計算基於生活各個方面,比較復雜,搜索引擎要做的就是返回用戶最想要的結果,有時站長們做網站要站在用戶的角度去考慮問題,其實這也是站在搜索引擎的角度考慮問題,不論在確定目標關鍵詞或者是長尾關鍵詞時,都可以根據中文分詞的原理來選擇,這樣可以最大化的減少無用功。
分詞原理不斷在變化,不斷在更新,我們應該繼續學習,只有掌握了本質才能抓住實質。