如何将复杂的表情符号转换为unicde?

时间:2017-11-06 22:19:01

标签: java unicode stanford-nlp emoji

例如,

good flavor

当我将此字符串复制到Java代码时,它会自动变为:

String str = EmojiParser.removeAllEmojis("good flavor\uD83D\uDC4D\uD83C\uDffB):

我在IntelliJ工作。复制后自动转换的字符串可以在我使用的外部库(stanford parser-chinese)中传递我的代码。

但是,如果我直接从文件中读入并应用上面相同的功能,它只会转换前两个代码" \ uD83D \ uDC4D"。其余的" \ u83C \ uDffB"没有被函数删除,因此我的代码在库中失败了。

在Java中,如何将此复合表情符号转换为unicode,以便我的代码可以安全通过?如果它可以转换成与我复制到代码中的格式相同的格式就足够了。

事实上,不仅表情符号,其他一些非标准的unicode字符可能会有相同的问题,而且我正在处理亚洲语言。

修改

public List<CoreMap> annotate(@Nonnull final String document) {
            Annotation annotation = new Annotation(EmojiParser.removeAllEmojis(document));
            this.annotate(annotation);
            List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class);
            if(sentences==null){
                return new ArrayList<CoreMap>();
            }
            return sentences;
        }

在此代码中,对于上面的String,&#39; annotation.get()&#39;将返回&#34; null&#34;,这不应该这样做。所以我需要预先格式化&#39;文档&#39;字符串在发送到新的Annodation()&#39;之前方法

编辑2:从文件中读取数据:

BufferedReader br = null;
        List<Document> processedDocs = new ArrayList<>();
        try {
            if (location == DataLocation.relativeToResources) {
                br = new BufferedReader(IOUtils.fileReaderAsResource(filePath));
            } else if (location == DataLocation.relativeToRoot) {
                br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
            } else {
                throw new RuntimeException("Unknown data location! " + location);
            }
            String line;
            int docNo = 0;
            List<Future<Document>> tasks = new ArrayList<>();
            while ((line = br.readLine()) != null) {
                line = line.trim();
                if (line.isEmpty()) {
                    continue;
                }
                Callable<Document> callable = null;
                callable = new NLPThread(line, filePath, ++docNo, docSource);

                if (callable != null) {
                    tasks.add(s_pool.submit(callable));
                }
            }

0 个答案:

没有答案