新的Android程序员来了。在过去的几天里,我一直在开发一个android应用程序,我遇到了一些障碍。
我正在使用一个名为Kuromoji (http://www.atilika.org/)的库将日语文本块解析为单个单词。但当我在Android中使用它时,它的功能似乎并不正确。
它使用纯Java构建并运行Intellij IDEA,以及使用Gradle的Java项目,但当我迁移到Android时,它开始出现故障。
我只是在为IDEA和Android运行新生成的空项目,我似乎无法确定冲突的因素。
感谢您的阅读,任何帮助都将不胜感激。
import org.atilika.kuromoji.Tokenizer;
import org.atilika.kuromoji.Token;
public class kuromoji_test {
public static void main(String[] args){
Tokenizer tokenizer = Tokenizer.builder().build();
for (Token token : tokenizer.tokenize("寿司が食べたい。")) {
System.out.println(token.getSurfaceForm() + "\t" + token.getAllFeatures());
}
}
}该代码在有或不带Gradle的情况下运行,生成正确的解析词以及词性等.
寿司名詞,一般,寿司,スシ,スシ的
が助詞,格助詞,一般,,,*,が,ガ,ガ
食べ動詞,自立,,,一段,連用形,食べる,タベ,タベ
たい助動詞,,,*,特殊·タイ,基本形,たい,タイ,タイ
..。記号,句点,,,。....
package com.example.towson.kuromoji_testing_with_android_studio;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import org.atilika.kuromoji.Token;
import org.atilika.kuromoji.Tokenizer;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
Tokenizer tokenizer = Tokenizer.builder().build();
for (Token token : tokenizer.tokenize("寿司が食べたい。")) {
System.out.println(token.getSurfaceForm() + "\t" + token.getAllFeatures());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}一切都很好,但是现在黑司只是按字符返回我的输入。返回字典信息的另一个函数似乎根本不运行。
Kuromoji在我的libs文件夹中,我把jar作为一个库添加。
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:寿
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:司
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:が
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:食
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:べ
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:た
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:い
05-10 01:06:52.813 5758-5758/com.example.towson.kuromoji_testing_with_android_studio I/System.out:
我来自Android的build.Gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 22
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "com.example.towson.kuromoji_testing_with_android_studio"
minSdkVersion 19
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.0.0'
}黑眼圈被编译在libs文件夹中。
来自Intellij的我的build.Gradle
apply plugin: 'java'
sourceCompatibility = 1.5
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.11'
}编辑:在Android应用程序中使用IDEA时,库继续出现故障。问题似乎与Android有关,而不是IDE。
签入调试模式时,库文件中的类对象将正确实例化。但是,大多数字符串方法只返回"“。不知道这是怎么回事。
编辑2:

下面是我的令牌和令牌程序类对象的照片。这就是它们正确运行时的样子。

下面是我的令牌和令牌程序类对象的照片,它们不正确地运行,您可以看到"surface_form“标记只包含一个字符,而不是两个字符。
有人知道我可以怎样调试这个吗?
发布于 2015-05-11 17:24:26
好吧,我想清楚了。我一直在使用一个调用Java函数的包,该包没有包含在Android版本的java中。
这就是为什么当我的项目被设置为Android应用程序时,我才有问题的原因。
将此复制自林特报告:
*自从我发表这个问题以来,使用了一套不同的图书馆。Kuromoji是日本的一种形态分析器,从那时起就把他们的代码捐赠给了Apache软件基金会。
在本报告中使用org.apache.lucene库。
InvalidPackage:未包含在Android中的包
../libs/lucene-分析器-通用-5.1.0.jar:库中无效的包引用;未包含在Android: java.nio.file中。引用自org.apache.lucene.analysis.hunspell.Dictionary.
../libs/lucene 5.1.0.jar:库中无效的包引用;没有包含在Android: java.lang.invoke中。引用自org.apache.lucene.util.AttributeFactory。
优先事项:6/ 10
类别:正确性
严重程度:错误
说明:未包含在Android中的软件包。此检查通过库进行扫描,查找对未包含在Android中的API的调用。
创建Android项目时,类路径被设置为只能访问Android中包含的API包中的类。但是,如果将其他项目添加到您的lib/文件夹中,则无法保证这些.jar文件是使用特定于Android的类路径构建的,特别是,它们可能正在访问不受支持的API,如java.applet。
此检查通过库jars进行扫描,并查找未包含在Android中的API包的引用,并标记这些包。如果您的代码调用了一个库类,它最终引用了不受支持的包,那么这只是一个错误。
https://stackoverflow.com/questions/30148174
复制相似问题