2011-03-09 95 views
11
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 
Mar 9, 2011 1:22:06 PM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: � (U+FFFD, decimal: 65533) 

這些是我在將POS標籤分配給句子時遇到的錯誤。我從文件中讀取句子。最初(對於幾句話)我沒有得到這個錯誤(即無法確認),但是在閱讀了一些句子之後,出現了這個錯誤。我使用POS tagger的v2.0(即2009),型號是left3words斯坦福在Java中使用POS POSGER

+0

似乎你分享內部apis,請刪除它,並將您的通用問題和所需的異常消息。而不是類名。爲安全限制... – 2011-03-09 08:07:42

+1

你可以請發佈解決方案嗎? – 2013-07-22 13:58:44

回答

8

我同意Yuval--一種字符編碼問題,但最常見的情況是,當文件處於單字節編碼(例如ISO-8859-1)中時,標記器試圖以UTF-8讀取它。請參閱Wikipedia上關於U + FFFD的討論。

+0

實際上我並沒有給文件整體進行標記。我從文件中提取句子進行標記。我在項目中使用的代碼如下:List >句子= MaxentTagger。tokenizeText(new StringReader(string1)); 爲(句<?延伸HasWord>句:句子) { 句 tSentence = MaxentTagger.tagSentence(句子); tag_s1_local = tSentence.toString(false); } – KNsiva 2011-03-10 06:08:13

+0

但它看起來像你的輸入字符串已經得到了在它U + FFFD字符,這只是正常情況下不應發生,似乎反映了與字符編碼的早期問題的任何代碼產生的字符串。如果只用charAt()打印字符串的字符,你會得到什麼? – 2011-03-18 21:48:36

+0

它打印了一些句子裏面做不是原來的人物有一樣!一些字符「」 .. etc.but當遇到這些字符的問題出現了。 – KNsiva 2011-03-22 11:12:29

2

這看起來像一個編碼問題給我。你能發表違規的句子嗎?我在文檔中找不到它,但我會嘗試檢查文件是否使用UTF-8編碼。

+0

從文件中讀取並嘗試標記後,我已將句子轉換爲UTF-8格式。對於幾個句子,我幾乎沒有任何問題。完成幾個句子後,只會發出警告。代碼爲:String string1 = file_read.readLine (); byte [] utf81 = string1.getBytes(「UTF-8」); string1 = new String(utf81,「UTF-8」); 將此行String1傳遞給標記器後,如上面的註釋中所示。 – KNsiva 2011-03-10 06:23:27

+0

讀你的代碼和克里斯托弗曼寧的回答,我相信你是從錯誤的方式開始的。您的輸入文件應該以UTF-8編碼開始。如果是單字節編碼,則標記器無法恢復原始字符。 – 2011-03-10 06:33:26

+0

有時最簡單的方法就是轉換輸入,但不需要。任何公認的編碼都可以工作但是你試圖處理編碼的方式看起來完全錯誤。在Java中,如果將編碼提供給InputStreamReader,它將在讀取數據時轉換數據。你不能使用默認編碼讀取字符串(不管是...),然後嘗試將它轉換爲你想要的,因爲如果編碼不匹配,讀取時會被搞亂。您可以通過InputStream讀取字節,然後轉換爲Unicode字符串,但這比需要更痛苦。 – 2011-03-23 18:34:01

0

如果您正在閱讀來自DOC,Portable Document Format(PDF)的內容,請使用Apache Tika。它會提取你的內容。它可能會幫助你。

Apache Tika

關於蒂卡

阿帕奇提卡是用於檢測和提取元數據,並從使用現有的解析器庫的各種文件結構化文本內容的工具包。它是用Java編寫的,但包含一個用於其他語言的命令行版本。在蒂卡,bug跟蹤

更多信息,郵件列表,下載和更可在http://tika.apache.org/

1

我就遇到了這個問題,也是如此。測試角色是否可標記的一種方法是檢查它是否失敗Character.isIdentifierIgnorable()。不可確認的角色將返回true,而所有可標記的角色將返回false