Merge branch 'master' of git://github.com/moses-smt/mosesdecoder

This commit is contained in:
phikoehn 2012-06-25 23:37:28 +01:00
commit 765e789c0c
39 changed files with 2469 additions and 279 deletions

11
Jamroot
View File

@ -89,16 +89,7 @@ project : requirements
;
#Add directories here if you want their incidental targets too (i.e. tests).
build-project lm ;
build-project util ;
#Trigger instllation into legacy paths.
build-project mert ;
build-project moses-cmd/src ;
build-project moses-chart-cmd/src ;
#Scripts have their own binaries.
build-project scripts ;
#Regression tests (only does anything if --with-regtest is passed)
build-project regression-testing ;
build-projects util lm mert moses-cmd/src moses-chart-cmd/src scripts regression-testing ;
alias programs : lm//query lm//build_binary moses-chart-cmd/src//moses_chart moses-cmd/src//programs OnDiskPt//CreateOnDiskPt OnDiskPt//queryOnDiskPt mert//programs contrib/server//mosesserver misc//programs symal phrase-extract phrase-extract//lexical-reordering phrase-extract//extract-ghkm phrase-extract//pcfg-extract phrase-extract//pcfg-score biconcor ;

View File

@ -0,0 +1,311 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1E73031E1597355A00C0E7FB /* kbmira.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E73031D1597355A00C0E7FB /* kbmira.cpp */; };
1EC060861597392900614957 /* libmert_lib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1EC060821597386600614957 /* libmert_lib.a */; };
1EC060B41597490F00614957 /* liblm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1EC060B11597490800614957 /* liblm.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
1EC060811597386600614957 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1EC0607A1597386500614957 /* mert_lib.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 1E2CCF3315939E2D00D858D1;
remoteInfo = mert_lib;
};
1EC060841597386C00614957 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1EC0607A1597386500614957 /* mert_lib.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 1E2CCF3215939E2D00D858D1;
remoteInfo = mert_lib;
};
1EC060B01597490800614957 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1EC060A51597490800614957 /* lm.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 1EE8C2E91476A48E002496F2;
remoteInfo = lm;
};
1EC060B51597491400614957 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1EC060A51597490800614957 /* lm.xcodeproj */;
proxyType = 1;
remoteGlobalIDString = 1EE8C2E81476A48E002496F2;
remoteInfo = lm;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
1E43CA3E159734A5000E29D3 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1E43CA40159734A5000E29D3 /* kbmira */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = kbmira; sourceTree = BUILT_PRODUCTS_DIR; };
1E73031D1597355A00C0E7FB /* kbmira.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = kbmira.cpp; path = ../../mert/kbmira.cpp; sourceTree = "<group>"; };
1EC0607A1597386500614957 /* mert_lib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = mert_lib.xcodeproj; sourceTree = "<group>"; };
1EC060A51597490800614957 /* lm.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = lm.xcodeproj; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
1E43CA3D159734A5000E29D3 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1EC060B41597490F00614957 /* liblm.a in Frameworks */,
1EC060861597392900614957 /* libmert_lib.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1E43CA35159734A5000E29D3 = {
isa = PBXGroup;
children = (
1EC060A51597490800614957 /* lm.xcodeproj */,
1EC0607A1597386500614957 /* mert_lib.xcodeproj */,
1E73031D1597355A00C0E7FB /* kbmira.cpp */,
1E43CA41159734A5000E29D3 /* Products */,
);
sourceTree = "<group>";
};
1E43CA41159734A5000E29D3 /* Products */ = {
isa = PBXGroup;
children = (
1E43CA40159734A5000E29D3 /* kbmira */,
);
name = Products;
sourceTree = "<group>";
};
1EC0607B1597386500614957 /* Products */ = {
isa = PBXGroup;
children = (
1EC060821597386600614957 /* libmert_lib.a */,
);
name = Products;
sourceTree = "<group>";
};
1EC060A61597490800614957 /* Products */ = {
isa = PBXGroup;
children = (
1EC060B11597490800614957 /* liblm.a */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
1E43CA3F159734A5000E29D3 /* kbmira */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1E43CA4A159734A5000E29D3 /* Build configuration list for PBXNativeTarget "kbmira" */;
buildPhases = (
1E43CA3C159734A5000E29D3 /* Sources */,
1E43CA3D159734A5000E29D3 /* Frameworks */,
1E43CA3E159734A5000E29D3 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
1EC060B61597491400614957 /* PBXTargetDependency */,
1EC060851597386C00614957 /* PBXTargetDependency */,
);
name = kbmira;
productName = kbmira;
productReference = 1E43CA40159734A5000E29D3 /* kbmira */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
1E43CA37159734A5000E29D3 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1E43CA3A159734A5000E29D3 /* Build configuration list for PBXProject "kbmira" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 1E43CA35159734A5000E29D3;
productRefGroup = 1E43CA41159734A5000E29D3 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 1EC060A61597490800614957 /* Products */;
ProjectRef = 1EC060A51597490800614957 /* lm.xcodeproj */;
},
{
ProductGroup = 1EC0607B1597386500614957 /* Products */;
ProjectRef = 1EC0607A1597386500614957 /* mert_lib.xcodeproj */;
},
);
projectRoot = "";
targets = (
1E43CA3F159734A5000E29D3 /* kbmira */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
1EC060821597386600614957 /* libmert_lib.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libmert_lib.a;
remoteRef = 1EC060811597386600614957 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
1EC060B11597490800614957 /* liblm.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = liblm.a;
remoteRef = 1EC060B01597490800614957 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXSourcesBuildPhase section */
1E43CA3C159734A5000E29D3 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1E73031E1597355A00C0E7FB /* kbmira.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
1EC060851597386C00614957 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = mert_lib;
targetProxy = 1EC060841597386C00614957 /* PBXContainerItemProxy */;
};
1EC060B61597491400614957 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = lm;
targetProxy = 1EC060B51597491400614957 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1E43CA48159734A5000E29D3 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LIBRARY_SEARCH_PATHS = /opt/local/lib;
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "";
SDKROOT = macosx;
};
name = Debug;
};
1E43CA49159734A5000E29D3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LIBRARY_SEARCH_PATHS = /opt/local/lib;
MACOSX_DEPLOYMENT_TARGET = 10.7;
OTHER_LDFLAGS = "";
SDKROOT = macosx;
};
name = Release;
};
1E43CA4B159734A5000E29D3 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
../..,
/opt/local/include,
);
OTHER_LDFLAGS = (
"-lboost_program_options",
"-lz",
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
1E43CA4C159734A5000E29D3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
../..,
/opt/local/include,
);
OTHER_LDFLAGS = (
"-lboost_program_options",
"-lz",
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1E43CA3A159734A5000E29D3 /* Build configuration list for PBXProject "kbmira" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1E43CA48159734A5000E29D3 /* Debug */,
1E43CA49159734A5000E29D3 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1E43CA4A159734A5000E29D3 /* Build configuration list for PBXNativeTarget "kbmira" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1E43CA4B159734A5000E29D3 /* Debug */,
1E43CA4C159734A5000E29D3 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 1E43CA37159734A5000E29D3 /* Project object */;
}

View File

@ -0,0 +1,242 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1E2B6ADE1593A5500028137E /* mert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2B6ADD1593A5500028137E /* mert.cpp */; };
1E2B6B1F1593CA8A0028137E /* libmert_lib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E2B6B141593A6F30028137E /* libmert_lib.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
1E2B6B131593A6F30028137E /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 1E2B6B0F1593A6F30028137E /* mert_lib.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = 1E2CCF3315939E2D00D858D1;
remoteInfo = mert_lib;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
1EB0AF031593A2180007E2A4 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1E2B6ADD1593A5500028137E /* mert.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mert.cpp; path = ../../mert/mert.cpp; sourceTree = "<group>"; };
1E2B6B0F1593A6F30028137E /* mert_lib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = mert_lib.xcodeproj; sourceTree = "<group>"; };
1EB0AF051593A2180007E2A4 /* mert */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = mert; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
1EB0AF021593A2180007E2A4 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
1E2B6B1F1593CA8A0028137E /* libmert_lib.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1E2B6B101593A6F30028137E /* Products */ = {
isa = PBXGroup;
children = (
1E2B6B141593A6F30028137E /* libmert_lib.a */,
);
name = Products;
sourceTree = "<group>";
};
1EB0AEFA1593A2180007E2A4 = {
isa = PBXGroup;
children = (
1E2B6B0F1593A6F30028137E /* mert_lib.xcodeproj */,
1E2B6ADD1593A5500028137E /* mert.cpp */,
1EB0AF061593A2180007E2A4 /* Products */,
);
sourceTree = "<group>";
};
1EB0AF061593A2180007E2A4 /* Products */ = {
isa = PBXGroup;
children = (
1EB0AF051593A2180007E2A4 /* mert */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
1EB0AF041593A2180007E2A4 /* mert */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1EB0AF0F1593A2180007E2A4 /* Build configuration list for PBXNativeTarget "mert" */;
buildPhases = (
1EB0AF011593A2180007E2A4 /* Sources */,
1EB0AF021593A2180007E2A4 /* Frameworks */,
1EB0AF031593A2180007E2A4 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = mert;
productName = mert;
productReference = 1EB0AF051593A2180007E2A4 /* mert */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
1EB0AEFC1593A2180007E2A4 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1EB0AEFF1593A2180007E2A4 /* Build configuration list for PBXProject "mert" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 1EB0AEFA1593A2180007E2A4;
productRefGroup = 1EB0AF061593A2180007E2A4 /* Products */;
projectDirPath = "";
projectReferences = (
{
ProductGroup = 1E2B6B101593A6F30028137E /* Products */;
ProjectRef = 1E2B6B0F1593A6F30028137E /* mert_lib.xcodeproj */;
},
);
projectRoot = "";
targets = (
1EB0AF041593A2180007E2A4 /* mert */,
);
};
/* End PBXProject section */
/* Begin PBXReferenceProxy section */
1E2B6B141593A6F30028137E /* libmert_lib.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libmert_lib.a;
remoteRef = 1E2B6B131593A6F30028137E /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXSourcesBuildPhase section */
1EB0AF011593A2180007E2A4 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1E2B6ADE1593A5500028137E /* mert.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1EB0AF0D1593A2180007E2A4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = "-lz";
SDKROOT = macosx;
};
name = Debug;
};
1EB0AF0E1593A2180007E2A4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
OTHER_LDFLAGS = "-lz";
SDKROOT = macosx;
};
name = Release;
};
1EB0AF101593A2180007E2A4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
../..,
/opt/local/include,
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
1EB0AF111593A2180007E2A4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
HEADER_SEARCH_PATHS = (
../..,
/opt/local/include,
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1EB0AEFF1593A2180007E2A4 /* Build configuration list for PBXProject "mert" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1EB0AF0D1593A2180007E2A4 /* Debug */,
1EB0AF0E1593A2180007E2A4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1EB0AF0F1593A2180007E2A4 /* Build configuration list for PBXNativeTarget "mert" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1EB0AF101593A2180007E2A4 /* Debug */,
1EB0AF111593A2180007E2A4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 1EB0AEFC1593A2180007E2A4 /* Project object */;
}

View File

@ -0,0 +1,607 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1E2CCFB915939E5D00D858D1 /* BleuScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF3A15939E5D00D858D1 /* BleuScorer.cpp */; };
1E2CCFBA15939E5D00D858D1 /* BleuScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF3B15939E5D00D858D1 /* BleuScorer.h */; };
1E2CCFBC15939E5D00D858D1 /* CderScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF3D15939E5D00D858D1 /* CderScorer.cpp */; };
1E2CCFBD15939E5D00D858D1 /* CderScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF3E15939E5D00D858D1 /* CderScorer.h */; };
1E2CCFBE15939E5D00D858D1 /* Data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF3F15939E5D00D858D1 /* Data.cpp */; };
1E2CCFBF15939E5D00D858D1 /* Data.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF4015939E5D00D858D1 /* Data.h */; };
1E2CCFC315939E5D00D858D1 /* Fdstream.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5115939E5D00D858D1 /* Fdstream.h */; };
1E2CCFC415939E5D00D858D1 /* FeatureArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5215939E5D00D858D1 /* FeatureArray.cpp */; };
1E2CCFC515939E5D00D858D1 /* FeatureArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5315939E5D00D858D1 /* FeatureArray.h */; };
1E2CCFC615939E5D00D858D1 /* FeatureData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5415939E5D00D858D1 /* FeatureData.cpp */; };
1E2CCFC715939E5D00D858D1 /* FeatureData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5515939E5D00D858D1 /* FeatureData.h */; };
1E2CCFC815939E5D00D858D1 /* FeatureDataIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5615939E5D00D858D1 /* FeatureDataIterator.cpp */; };
1E2CCFC915939E5D00D858D1 /* FeatureDataIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5715939E5D00D858D1 /* FeatureDataIterator.h */; };
1E2CCFCB15939E5D00D858D1 /* FeatureStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5915939E5D00D858D1 /* FeatureStats.cpp */; };
1E2CCFCC15939E5D00D858D1 /* FeatureStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5A15939E5D00D858D1 /* FeatureStats.h */; };
1E2CCFCD15939E5D00D858D1 /* FileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5B15939E5D00D858D1 /* FileStream.cpp */; };
1E2CCFCE15939E5D00D858D1 /* FileStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5C15939E5D00D858D1 /* FileStream.h */; };
1E2CCFCF15939E5D00D858D1 /* GzFileBuf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5D15939E5D00D858D1 /* GzFileBuf.cpp */; };
1E2CCFD015939E5D00D858D1 /* GzFileBuf.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF5E15939E5D00D858D1 /* GzFileBuf.h */; };
1E2CCFD115939E5D00D858D1 /* HypPackEnumerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF5F15939E5D00D858D1 /* HypPackEnumerator.cpp */; };
1E2CCFD215939E5D00D858D1 /* HypPackEnumerator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6015939E5D00D858D1 /* HypPackEnumerator.h */; };
1E2CCFD315939E5D00D858D1 /* InterpolatedScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF6115939E5D00D858D1 /* InterpolatedScorer.cpp */; };
1E2CCFD415939E5D00D858D1 /* InterpolatedScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6215939E5D00D858D1 /* InterpolatedScorer.h */; };
1E2CCFD715939E5D00D858D1 /* MergeScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF6515939E5D00D858D1 /* MergeScorer.cpp */; };
1E2CCFD815939E5D00D858D1 /* MergeScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6615939E5D00D858D1 /* MergeScorer.h */; };
1E2CCFD915939E5D00D858D1 /* mert.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF6715939E5D00D858D1 /* mert.cpp */; };
1E2CCFDA15939E5D00D858D1 /* MiraFeatureVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF6815939E5D00D858D1 /* MiraFeatureVector.cpp */; };
1E2CCFDB15939E5D00D858D1 /* MiraFeatureVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6915939E5D00D858D1 /* MiraFeatureVector.h */; };
1E2CCFDC15939E5D00D858D1 /* MiraWeightVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF6A15939E5D00D858D1 /* MiraWeightVector.cpp */; };
1E2CCFDD15939E5D00D858D1 /* MiraWeightVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6B15939E5D00D858D1 /* MiraWeightVector.h */; };
1E2CCFDE15939E5D00D858D1 /* Ngram.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6C15939E5D00D858D1 /* Ngram.h */; };
1E2CCFE015939E5D00D858D1 /* Optimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF6E15939E5D00D858D1 /* Optimizer.cpp */; };
1E2CCFE115939E5D00D858D1 /* Optimizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF6F15939E5D00D858D1 /* Optimizer.h */; };
1E2CCFE215939E5D00D858D1 /* OptimizerFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF7015939E5D00D858D1 /* OptimizerFactory.cpp */; };
1E2CCFE315939E5D00D858D1 /* OptimizerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7115939E5D00D858D1 /* OptimizerFactory.h */; };
1E2CCFE515939E5D00D858D1 /* PerScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF7315939E5D00D858D1 /* PerScorer.cpp */; };
1E2CCFE615939E5D00D858D1 /* PerScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7415939E5D00D858D1 /* PerScorer.h */; };
1E2CCFE715939E5D00D858D1 /* Point.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF7515939E5D00D858D1 /* Point.cpp */; };
1E2CCFE815939E5D00D858D1 /* Point.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7615939E5D00D858D1 /* Point.h */; };
1E2CCFEA15939E5D00D858D1 /* PreProcessFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF7815939E5D00D858D1 /* PreProcessFilter.cpp */; };
1E2CCFEB15939E5D00D858D1 /* PreProcessFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7915939E5D00D858D1 /* PreProcessFilter.h */; };
1E2CCFED15939E5D00D858D1 /* Reference.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7B15939E5D00D858D1 /* Reference.h */; };
1E2CCFEF15939E5D00D858D1 /* ScopedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7D15939E5D00D858D1 /* ScopedVector.h */; };
1E2CCFF015939E5D00D858D1 /* ScoreArray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF7E15939E5D00D858D1 /* ScoreArray.cpp */; };
1E2CCFF115939E5D00D858D1 /* ScoreArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF7F15939E5D00D858D1 /* ScoreArray.h */; };
1E2CCFF215939E5D00D858D1 /* ScoreData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8015939E5D00D858D1 /* ScoreData.cpp */; };
1E2CCFF315939E5D00D858D1 /* ScoreData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8115939E5D00D858D1 /* ScoreData.h */; };
1E2CCFF415939E5D00D858D1 /* ScoreDataIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8215939E5D00D858D1 /* ScoreDataIterator.cpp */; };
1E2CCFF515939E5D00D858D1 /* ScoreDataIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8315939E5D00D858D1 /* ScoreDataIterator.h */; };
1E2CCFF615939E5D00D858D1 /* Scorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8415939E5D00D858D1 /* Scorer.cpp */; };
1E2CCFF715939E5D00D858D1 /* Scorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8515939E5D00D858D1 /* Scorer.h */; };
1E2CCFF815939E5D00D858D1 /* ScorerFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8615939E5D00D858D1 /* ScorerFactory.cpp */; };
1E2CCFF915939E5D00D858D1 /* ScorerFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8715939E5D00D858D1 /* ScorerFactory.h */; };
1E2CCFFA15939E5D00D858D1 /* ScoreStats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8815939E5D00D858D1 /* ScoreStats.cpp */; };
1E2CCFFB15939E5D00D858D1 /* ScoreStats.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8915939E5D00D858D1 /* ScoreStats.h */; };
1E2CCFFC15939E5D00D858D1 /* SemposOverlapping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8A15939E5D00D858D1 /* SemposOverlapping.cpp */; };
1E2CCFFD15939E5D00D858D1 /* SemposOverlapping.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8B15939E5D00D858D1 /* SemposOverlapping.h */; };
1E2CCFFE15939E5D00D858D1 /* SemposScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF8C15939E5D00D858D1 /* SemposScorer.cpp */; };
1E2CCFFF15939E5D00D858D1 /* SemposScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8D15939E5D00D858D1 /* SemposScorer.h */; };
1E2CD00015939E5D00D858D1 /* Singleton.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF8E15939E5D00D858D1 /* Singleton.h */; };
1E2CD00215939E5D00D858D1 /* alignmentStruct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9115939E5D00D858D1 /* alignmentStruct.cpp */; };
1E2CD00315939E5D00D858D1 /* alignmentStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9215939E5D00D858D1 /* alignmentStruct.h */; };
1E2CD00415939E5D00D858D1 /* bestShiftStruct.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9315939E5D00D858D1 /* bestShiftStruct.h */; };
1E2CD00515939E5D00D858D1 /* hashMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9415939E5D00D858D1 /* hashMap.cpp */; };
1E2CD00615939E5D00D858D1 /* hashMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9515939E5D00D858D1 /* hashMap.h */; };
1E2CD00715939E5D00D858D1 /* hashMapInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9615939E5D00D858D1 /* hashMapInfos.cpp */; };
1E2CD00815939E5D00D858D1 /* hashMapInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9715939E5D00D858D1 /* hashMapInfos.h */; };
1E2CD00915939E5D00D858D1 /* hashMapStringInfos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9815939E5D00D858D1 /* hashMapStringInfos.cpp */; };
1E2CD00A15939E5D00D858D1 /* hashMapStringInfos.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9915939E5D00D858D1 /* hashMapStringInfos.h */; };
1E2CD00B15939E5D00D858D1 /* infosHasher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9A15939E5D00D858D1 /* infosHasher.cpp */; };
1E2CD00C15939E5D00D858D1 /* infosHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9B15939E5D00D858D1 /* infosHasher.h */; };
1E2CD00D15939E5D00D858D1 /* stringHasher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9C15939E5D00D858D1 /* stringHasher.cpp */; };
1E2CD00E15939E5D00D858D1 /* stringHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9D15939E5D00D858D1 /* stringHasher.h */; };
1E2CD00F15939E5D00D858D1 /* stringInfosHasher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCF9E15939E5D00D858D1 /* stringInfosHasher.cpp */; };
1E2CD01015939E5D00D858D1 /* stringInfosHasher.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCF9F15939E5D00D858D1 /* stringInfosHasher.h */; };
1E2CD01115939E5D00D858D1 /* terAlignment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFA015939E5D00D858D1 /* terAlignment.cpp */; };
1E2CD01215939E5D00D858D1 /* terAlignment.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFA115939E5D00D858D1 /* terAlignment.h */; };
1E2CD01315939E5D00D858D1 /* tercalc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFA215939E5D00D858D1 /* tercalc.cpp */; };
1E2CD01415939E5D00D858D1 /* tercalc.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFA315939E5D00D858D1 /* tercalc.h */; };
1E2CD01515939E5D00D858D1 /* terShift.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFA415939E5D00D858D1 /* terShift.cpp */; };
1E2CD01615939E5D00D858D1 /* terShift.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFA515939E5D00D858D1 /* terShift.h */; };
1E2CD01715939E5D00D858D1 /* tools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFA615939E5D00D858D1 /* tools.cpp */; };
1E2CD01815939E5D00D858D1 /* tools.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFA715939E5D00D858D1 /* tools.h */; };
1E2CD01915939E5D00D858D1 /* TerScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFA815939E5D00D858D1 /* TerScorer.cpp */; };
1E2CD01A15939E5D00D858D1 /* TerScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFA915939E5D00D858D1 /* TerScorer.h */; };
1E2CD01C15939E5D00D858D1 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFAE15939E5D00D858D1 /* Timer.cpp */; };
1E2CD01D15939E5D00D858D1 /* Timer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFAF15939E5D00D858D1 /* Timer.h */; };
1E2CD01F15939E5D00D858D1 /* Types.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFB215939E5D00D858D1 /* Types.h */; };
1E2CD02015939E5D00D858D1 /* Util.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFB315939E5D00D858D1 /* Util.cpp */; };
1E2CD02115939E5D00D858D1 /* Util.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFB415939E5D00D858D1 /* Util.h */; };
1E2CD02315939E5D00D858D1 /* Vocabulary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E2CCFB615939E5D00D858D1 /* Vocabulary.cpp */; };
1E2CD02415939E5D00D858D1 /* Vocabulary.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E2CCFB715939E5D00D858D1 /* Vocabulary.h */; };
1E39621B1594CFD1006FE978 /* PermutationScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E3962191594CFD1006FE978 /* PermutationScorer.cpp */; };
1E3962201594CFF9006FE978 /* Permutation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E39621E1594CFF9006FE978 /* Permutation.cpp */; };
1E3962211594CFF9006FE978 /* Permutation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E39621F1594CFF9006FE978 /* Permutation.h */; };
1E3962231594D0FF006FE978 /* SentenceLevelScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1E3962221594D0FF006FE978 /* SentenceLevelScorer.cpp */; };
1E3962251594D12C006FE978 /* SentenceLevelScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E3962241594D12C006FE978 /* SentenceLevelScorer.h */; };
1E43CA3415973474000E29D3 /* PermutationScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E43CA3315973474000E29D3 /* PermutationScorer.h */; };
1EE52B561596B3E4006DC938 /* StatisticsBasedScorer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1EE52B551596B3E4006DC938 /* StatisticsBasedScorer.h */; };
1EE52B591596B3FC006DC938 /* StatisticsBasedScorer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1EE52B581596B3FC006DC938 /* StatisticsBasedScorer.cpp */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
1E2CCF3315939E2D00D858D1 /* libmert_lib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmert_lib.a; sourceTree = BUILT_PRODUCTS_DIR; };
1E2CCF3A15939E5D00D858D1 /* BleuScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BleuScorer.cpp; path = ../../mert/BleuScorer.cpp; sourceTree = "<group>"; };
1E2CCF3B15939E5D00D858D1 /* BleuScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BleuScorer.h; path = ../../mert/BleuScorer.h; sourceTree = "<group>"; };
1E2CCF3D15939E5D00D858D1 /* CderScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CderScorer.cpp; path = ../../mert/CderScorer.cpp; sourceTree = "<group>"; };
1E2CCF3E15939E5D00D858D1 /* CderScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CderScorer.h; path = ../../mert/CderScorer.h; sourceTree = "<group>"; };
1E2CCF3F15939E5D00D858D1 /* Data.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Data.cpp; path = ../../mert/Data.cpp; sourceTree = "<group>"; };
1E2CCF4015939E5D00D858D1 /* Data.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Data.h; path = ../../mert/Data.h; sourceTree = "<group>"; };
1E2CCF5115939E5D00D858D1 /* Fdstream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Fdstream.h; path = ../../mert/Fdstream.h; sourceTree = "<group>"; };
1E2CCF5215939E5D00D858D1 /* FeatureArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FeatureArray.cpp; path = ../../mert/FeatureArray.cpp; sourceTree = "<group>"; };
1E2CCF5315939E5D00D858D1 /* FeatureArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FeatureArray.h; path = ../../mert/FeatureArray.h; sourceTree = "<group>"; };
1E2CCF5415939E5D00D858D1 /* FeatureData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FeatureData.cpp; path = ../../mert/FeatureData.cpp; sourceTree = "<group>"; };
1E2CCF5515939E5D00D858D1 /* FeatureData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FeatureData.h; path = ../../mert/FeatureData.h; sourceTree = "<group>"; };
1E2CCF5615939E5D00D858D1 /* FeatureDataIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FeatureDataIterator.cpp; path = ../../mert/FeatureDataIterator.cpp; sourceTree = "<group>"; };
1E2CCF5715939E5D00D858D1 /* FeatureDataIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FeatureDataIterator.h; path = ../../mert/FeatureDataIterator.h; sourceTree = "<group>"; };
1E2CCF5915939E5D00D858D1 /* FeatureStats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FeatureStats.cpp; path = ../../mert/FeatureStats.cpp; sourceTree = "<group>"; };
1E2CCF5A15939E5D00D858D1 /* FeatureStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FeatureStats.h; path = ../../mert/FeatureStats.h; sourceTree = "<group>"; };
1E2CCF5B15939E5D00D858D1 /* FileStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileStream.cpp; path = ../../mert/FileStream.cpp; sourceTree = "<group>"; };
1E2CCF5C15939E5D00D858D1 /* FileStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileStream.h; path = ../../mert/FileStream.h; sourceTree = "<group>"; };
1E2CCF5D15939E5D00D858D1 /* GzFileBuf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GzFileBuf.cpp; path = ../../mert/GzFileBuf.cpp; sourceTree = "<group>"; };
1E2CCF5E15939E5D00D858D1 /* GzFileBuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GzFileBuf.h; path = ../../mert/GzFileBuf.h; sourceTree = "<group>"; };
1E2CCF5F15939E5D00D858D1 /* HypPackEnumerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = HypPackEnumerator.cpp; path = ../../mert/HypPackEnumerator.cpp; sourceTree = "<group>"; };
1E2CCF6015939E5D00D858D1 /* HypPackEnumerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HypPackEnumerator.h; path = ../../mert/HypPackEnumerator.h; sourceTree = "<group>"; };
1E2CCF6115939E5D00D858D1 /* InterpolatedScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InterpolatedScorer.cpp; path = ../../mert/InterpolatedScorer.cpp; sourceTree = "<group>"; };
1E2CCF6215939E5D00D858D1 /* InterpolatedScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = InterpolatedScorer.h; path = ../../mert/InterpolatedScorer.h; sourceTree = "<group>"; };
1E2CCF6515939E5D00D858D1 /* MergeScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MergeScorer.cpp; path = ../../mert/MergeScorer.cpp; sourceTree = "<group>"; };
1E2CCF6615939E5D00D858D1 /* MergeScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MergeScorer.h; path = ../../mert/MergeScorer.h; sourceTree = "<group>"; };
1E2CCF6715939E5D00D858D1 /* mert.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = mert.cpp; path = ../../mert/mert.cpp; sourceTree = "<group>"; };
1E2CCF6815939E5D00D858D1 /* MiraFeatureVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MiraFeatureVector.cpp; path = ../../mert/MiraFeatureVector.cpp; sourceTree = "<group>"; };
1E2CCF6915939E5D00D858D1 /* MiraFeatureVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiraFeatureVector.h; path = ../../mert/MiraFeatureVector.h; sourceTree = "<group>"; };
1E2CCF6A15939E5D00D858D1 /* MiraWeightVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MiraWeightVector.cpp; path = ../../mert/MiraWeightVector.cpp; sourceTree = "<group>"; };
1E2CCF6B15939E5D00D858D1 /* MiraWeightVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MiraWeightVector.h; path = ../../mert/MiraWeightVector.h; sourceTree = "<group>"; };
1E2CCF6C15939E5D00D858D1 /* Ngram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Ngram.h; path = ../../mert/Ngram.h; sourceTree = "<group>"; };
1E2CCF6E15939E5D00D858D1 /* Optimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Optimizer.cpp; path = ../../mert/Optimizer.cpp; sourceTree = "<group>"; };
1E2CCF6F15939E5D00D858D1 /* Optimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Optimizer.h; path = ../../mert/Optimizer.h; sourceTree = "<group>"; };
1E2CCF7015939E5D00D858D1 /* OptimizerFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizerFactory.cpp; path = ../../mert/OptimizerFactory.cpp; sourceTree = "<group>"; };
1E2CCF7115939E5D00D858D1 /* OptimizerFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptimizerFactory.h; path = ../../mert/OptimizerFactory.h; sourceTree = "<group>"; };
1E2CCF7315939E5D00D858D1 /* PerScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PerScorer.cpp; path = ../../mert/PerScorer.cpp; sourceTree = "<group>"; };
1E2CCF7415939E5D00D858D1 /* PerScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PerScorer.h; path = ../../mert/PerScorer.h; sourceTree = "<group>"; };
1E2CCF7515939E5D00D858D1 /* Point.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Point.cpp; path = ../../mert/Point.cpp; sourceTree = "<group>"; };
1E2CCF7615939E5D00D858D1 /* Point.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Point.h; path = ../../mert/Point.h; sourceTree = "<group>"; };
1E2CCF7815939E5D00D858D1 /* PreProcessFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PreProcessFilter.cpp; path = ../../mert/PreProcessFilter.cpp; sourceTree = "<group>"; };
1E2CCF7915939E5D00D858D1 /* PreProcessFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PreProcessFilter.h; path = ../../mert/PreProcessFilter.h; sourceTree = "<group>"; };
1E2CCF7B15939E5D00D858D1 /* Reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Reference.h; path = ../../mert/Reference.h; sourceTree = "<group>"; };
1E2CCF7D15939E5D00D858D1 /* ScopedVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScopedVector.h; path = ../../mert/ScopedVector.h; sourceTree = "<group>"; };
1E2CCF7E15939E5D00D858D1 /* ScoreArray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreArray.cpp; path = ../../mert/ScoreArray.cpp; sourceTree = "<group>"; };
1E2CCF7F15939E5D00D858D1 /* ScoreArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScoreArray.h; path = ../../mert/ScoreArray.h; sourceTree = "<group>"; };
1E2CCF8015939E5D00D858D1 /* ScoreData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreData.cpp; path = ../../mert/ScoreData.cpp; sourceTree = "<group>"; };
1E2CCF8115939E5D00D858D1 /* ScoreData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScoreData.h; path = ../../mert/ScoreData.h; sourceTree = "<group>"; };
1E2CCF8215939E5D00D858D1 /* ScoreDataIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreDataIterator.cpp; path = ../../mert/ScoreDataIterator.cpp; sourceTree = "<group>"; };
1E2CCF8315939E5D00D858D1 /* ScoreDataIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScoreDataIterator.h; path = ../../mert/ScoreDataIterator.h; sourceTree = "<group>"; };
1E2CCF8415939E5D00D858D1 /* Scorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scorer.cpp; path = ../../mert/Scorer.cpp; sourceTree = "<group>"; };
1E2CCF8515939E5D00D858D1 /* Scorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scorer.h; path = ../../mert/Scorer.h; sourceTree = "<group>"; };
1E2CCF8615939E5D00D858D1 /* ScorerFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScorerFactory.cpp; path = ../../mert/ScorerFactory.cpp; sourceTree = "<group>"; };
1E2CCF8715939E5D00D858D1 /* ScorerFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScorerFactory.h; path = ../../mert/ScorerFactory.h; sourceTree = "<group>"; };
1E2CCF8815939E5D00D858D1 /* ScoreStats.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScoreStats.cpp; path = ../../mert/ScoreStats.cpp; sourceTree = "<group>"; };
1E2CCF8915939E5D00D858D1 /* ScoreStats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScoreStats.h; path = ../../mert/ScoreStats.h; sourceTree = "<group>"; };
1E2CCF8A15939E5D00D858D1 /* SemposOverlapping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SemposOverlapping.cpp; path = ../../mert/SemposOverlapping.cpp; sourceTree = "<group>"; };
1E2CCF8B15939E5D00D858D1 /* SemposOverlapping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SemposOverlapping.h; path = ../../mert/SemposOverlapping.h; sourceTree = "<group>"; };
1E2CCF8C15939E5D00D858D1 /* SemposScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SemposScorer.cpp; path = ../../mert/SemposScorer.cpp; sourceTree = "<group>"; };
1E2CCF8D15939E5D00D858D1 /* SemposScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SemposScorer.h; path = ../../mert/SemposScorer.h; sourceTree = "<group>"; };
1E2CCF8E15939E5D00D858D1 /* Singleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Singleton.h; path = ../../mert/Singleton.h; sourceTree = "<group>"; };
1E2CCF9115939E5D00D858D1 /* alignmentStruct.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = alignmentStruct.cpp; sourceTree = "<group>"; };
1E2CCF9215939E5D00D858D1 /* alignmentStruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alignmentStruct.h; sourceTree = "<group>"; };
1E2CCF9315939E5D00D858D1 /* bestShiftStruct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bestShiftStruct.h; sourceTree = "<group>"; };
1E2CCF9415939E5D00D858D1 /* hashMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hashMap.cpp; sourceTree = "<group>"; };
1E2CCF9515939E5D00D858D1 /* hashMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashMap.h; sourceTree = "<group>"; };
1E2CCF9615939E5D00D858D1 /* hashMapInfos.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hashMapInfos.cpp; sourceTree = "<group>"; };
1E2CCF9715939E5D00D858D1 /* hashMapInfos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashMapInfos.h; sourceTree = "<group>"; };
1E2CCF9815939E5D00D858D1 /* hashMapStringInfos.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hashMapStringInfos.cpp; sourceTree = "<group>"; };
1E2CCF9915939E5D00D858D1 /* hashMapStringInfos.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hashMapStringInfos.h; sourceTree = "<group>"; };
1E2CCF9A15939E5D00D858D1 /* infosHasher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = infosHasher.cpp; sourceTree = "<group>"; };
1E2CCF9B15939E5D00D858D1 /* infosHasher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = infosHasher.h; sourceTree = "<group>"; };
1E2CCF9C15939E5D00D858D1 /* stringHasher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stringHasher.cpp; sourceTree = "<group>"; };
1E2CCF9D15939E5D00D858D1 /* stringHasher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stringHasher.h; sourceTree = "<group>"; };
1E2CCF9E15939E5D00D858D1 /* stringInfosHasher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = stringInfosHasher.cpp; sourceTree = "<group>"; };
1E2CCF9F15939E5D00D858D1 /* stringInfosHasher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stringInfosHasher.h; sourceTree = "<group>"; };
1E2CCFA015939E5D00D858D1 /* terAlignment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = terAlignment.cpp; sourceTree = "<group>"; };
1E2CCFA115939E5D00D858D1 /* terAlignment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terAlignment.h; sourceTree = "<group>"; };
1E2CCFA215939E5D00D858D1 /* tercalc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tercalc.cpp; sourceTree = "<group>"; };
1E2CCFA315939E5D00D858D1 /* tercalc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tercalc.h; sourceTree = "<group>"; };
1E2CCFA415939E5D00D858D1 /* terShift.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = terShift.cpp; sourceTree = "<group>"; };
1E2CCFA515939E5D00D858D1 /* terShift.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = terShift.h; sourceTree = "<group>"; };
1E2CCFA615939E5D00D858D1 /* tools.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tools.cpp; sourceTree = "<group>"; };
1E2CCFA715939E5D00D858D1 /* tools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tools.h; sourceTree = "<group>"; };
1E2CCFA815939E5D00D858D1 /* TerScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TerScorer.cpp; path = ../../mert/TerScorer.cpp; sourceTree = "<group>"; };
1E2CCFA915939E5D00D858D1 /* TerScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TerScorer.h; path = ../../mert/TerScorer.h; sourceTree = "<group>"; };
1E2CCFAE15939E5D00D858D1 /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Timer.cpp; path = ../../mert/Timer.cpp; sourceTree = "<group>"; };
1E2CCFAF15939E5D00D858D1 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Timer.h; path = ../../mert/Timer.h; sourceTree = "<group>"; };
1E2CCFB215939E5D00D858D1 /* Types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Types.h; path = ../../mert/Types.h; sourceTree = "<group>"; };
1E2CCFB315939E5D00D858D1 /* Util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Util.cpp; path = ../../mert/Util.cpp; sourceTree = "<group>"; };
1E2CCFB415939E5D00D858D1 /* Util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Util.h; path = ../../mert/Util.h; sourceTree = "<group>"; };
1E2CCFB615939E5D00D858D1 /* Vocabulary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vocabulary.cpp; path = ../../mert/Vocabulary.cpp; sourceTree = "<group>"; };
1E2CCFB715939E5D00D858D1 /* Vocabulary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vocabulary.h; path = ../../mert/Vocabulary.h; sourceTree = "<group>"; };
1E3962191594CFD1006FE978 /* PermutationScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PermutationScorer.cpp; path = ../../mert/PermutationScorer.cpp; sourceTree = "<group>"; };
1E39621E1594CFF9006FE978 /* Permutation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Permutation.cpp; path = ../../mert/Permutation.cpp; sourceTree = "<group>"; };
1E39621F1594CFF9006FE978 /* Permutation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Permutation.h; path = ../../mert/Permutation.h; sourceTree = "<group>"; };
1E3962221594D0FF006FE978 /* SentenceLevelScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SentenceLevelScorer.cpp; path = ../../mert/SentenceLevelScorer.cpp; sourceTree = "<group>"; };
1E3962241594D12C006FE978 /* SentenceLevelScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SentenceLevelScorer.h; path = ../../mert/SentenceLevelScorer.h; sourceTree = "<group>"; };
1E43CA3315973474000E29D3 /* PermutationScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PermutationScorer.h; path = ../../mert/PermutationScorer.h; sourceTree = "<group>"; };
1EE52B551596B3E4006DC938 /* StatisticsBasedScorer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StatisticsBasedScorer.h; path = ../../mert/StatisticsBasedScorer.h; sourceTree = "<group>"; };
1EE52B581596B3FC006DC938 /* StatisticsBasedScorer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StatisticsBasedScorer.cpp; path = ../../mert/StatisticsBasedScorer.cpp; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
1E2CCF3015939E2D00D858D1 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
1E2CCF2815939E2D00D858D1 = {
isa = PBXGroup;
children = (
1EE52B581596B3FC006DC938 /* StatisticsBasedScorer.cpp */,
1EE52B551596B3E4006DC938 /* StatisticsBasedScorer.h */,
1E3962241594D12C006FE978 /* SentenceLevelScorer.h */,
1E3962221594D0FF006FE978 /* SentenceLevelScorer.cpp */,
1E39621E1594CFF9006FE978 /* Permutation.cpp */,
1E39621F1594CFF9006FE978 /* Permutation.h */,
1E3962191594CFD1006FE978 /* PermutationScorer.cpp */,
1E43CA3315973474000E29D3 /* PermutationScorer.h */,
1E2CCF3A15939E5D00D858D1 /* BleuScorer.cpp */,
1E2CCF3B15939E5D00D858D1 /* BleuScorer.h */,
1E2CCF3D15939E5D00D858D1 /* CderScorer.cpp */,
1E2CCF3E15939E5D00D858D1 /* CderScorer.h */,
1E2CCF3F15939E5D00D858D1 /* Data.cpp */,
1E2CCF4015939E5D00D858D1 /* Data.h */,
1E2CCF5115939E5D00D858D1 /* Fdstream.h */,
1E2CCF5215939E5D00D858D1 /* FeatureArray.cpp */,
1E2CCF5315939E5D00D858D1 /* FeatureArray.h */,
1E2CCF5415939E5D00D858D1 /* FeatureData.cpp */,
1E2CCF5515939E5D00D858D1 /* FeatureData.h */,
1E2CCF5615939E5D00D858D1 /* FeatureDataIterator.cpp */,
1E2CCF5715939E5D00D858D1 /* FeatureDataIterator.h */,
1E2CCF5915939E5D00D858D1 /* FeatureStats.cpp */,
1E2CCF5A15939E5D00D858D1 /* FeatureStats.h */,
1E2CCF5B15939E5D00D858D1 /* FileStream.cpp */,
1E2CCF5C15939E5D00D858D1 /* FileStream.h */,
1E2CCF5D15939E5D00D858D1 /* GzFileBuf.cpp */,
1E2CCF5E15939E5D00D858D1 /* GzFileBuf.h */,
1E2CCF5F15939E5D00D858D1 /* HypPackEnumerator.cpp */,
1E2CCF6015939E5D00D858D1 /* HypPackEnumerator.h */,
1E2CCF6115939E5D00D858D1 /* InterpolatedScorer.cpp */,
1E2CCF6215939E5D00D858D1 /* InterpolatedScorer.h */,
1E2CCF6515939E5D00D858D1 /* MergeScorer.cpp */,
1E2CCF6615939E5D00D858D1 /* MergeScorer.h */,
1E2CCF6715939E5D00D858D1 /* mert.cpp */,
1E2CCF6815939E5D00D858D1 /* MiraFeatureVector.cpp */,
1E2CCF6915939E5D00D858D1 /* MiraFeatureVector.h */,
1E2CCF6A15939E5D00D858D1 /* MiraWeightVector.cpp */,
1E2CCF6B15939E5D00D858D1 /* MiraWeightVector.h */,
1E2CCF6C15939E5D00D858D1 /* Ngram.h */,
1E2CCF6E15939E5D00D858D1 /* Optimizer.cpp */,
1E2CCF6F15939E5D00D858D1 /* Optimizer.h */,
1E2CCF7015939E5D00D858D1 /* OptimizerFactory.cpp */,
1E2CCF7115939E5D00D858D1 /* OptimizerFactory.h */,
1E2CCF7315939E5D00D858D1 /* PerScorer.cpp */,
1E2CCF7415939E5D00D858D1 /* PerScorer.h */,
1E2CCF7515939E5D00D858D1 /* Point.cpp */,
1E2CCF7615939E5D00D858D1 /* Point.h */,
1E2CCF7815939E5D00D858D1 /* PreProcessFilter.cpp */,
1E2CCF7915939E5D00D858D1 /* PreProcessFilter.h */,
1E2CCF7B15939E5D00D858D1 /* Reference.h */,
1E2CCF7D15939E5D00D858D1 /* ScopedVector.h */,
1E2CCF7E15939E5D00D858D1 /* ScoreArray.cpp */,
1E2CCF7F15939E5D00D858D1 /* ScoreArray.h */,
1E2CCF8015939E5D00D858D1 /* ScoreData.cpp */,
1E2CCF8115939E5D00D858D1 /* ScoreData.h */,
1E2CCF8215939E5D00D858D1 /* ScoreDataIterator.cpp */,
1E2CCF8315939E5D00D858D1 /* ScoreDataIterator.h */,
1E2CCF8415939E5D00D858D1 /* Scorer.cpp */,
1E2CCF8515939E5D00D858D1 /* Scorer.h */,
1E2CCF8615939E5D00D858D1 /* ScorerFactory.cpp */,
1E2CCF8715939E5D00D858D1 /* ScorerFactory.h */,
1E2CCF8815939E5D00D858D1 /* ScoreStats.cpp */,
1E2CCF8915939E5D00D858D1 /* ScoreStats.h */,
1E2CCF8A15939E5D00D858D1 /* SemposOverlapping.cpp */,
1E2CCF8B15939E5D00D858D1 /* SemposOverlapping.h */,
1E2CCF8C15939E5D00D858D1 /* SemposScorer.cpp */,
1E2CCF8D15939E5D00D858D1 /* SemposScorer.h */,
1E2CCF8E15939E5D00D858D1 /* Singleton.h */,
1E2CCF9015939E5D00D858D1 /* TER */,
1E2CCFA815939E5D00D858D1 /* TerScorer.cpp */,
1E2CCFA915939E5D00D858D1 /* TerScorer.h */,
1E2CCFAE15939E5D00D858D1 /* Timer.cpp */,
1E2CCFAF15939E5D00D858D1 /* Timer.h */,
1E2CCFB215939E5D00D858D1 /* Types.h */,
1E2CCFB315939E5D00D858D1 /* Util.cpp */,
1E2CCFB415939E5D00D858D1 /* Util.h */,
1E2CCFB615939E5D00D858D1 /* Vocabulary.cpp */,
1E2CCFB715939E5D00D858D1 /* Vocabulary.h */,
1E2CCF3415939E2D00D858D1 /* Products */,
);
sourceTree = "<group>";
};
1E2CCF3415939E2D00D858D1 /* Products */ = {
isa = PBXGroup;
children = (
1E2CCF3315939E2D00D858D1 /* libmert_lib.a */,
);
name = Products;
sourceTree = "<group>";
};
1E2CCF9015939E5D00D858D1 /* TER */ = {
isa = PBXGroup;
children = (
1E2CCF9115939E5D00D858D1 /* alignmentStruct.cpp */,
1E2CCF9215939E5D00D858D1 /* alignmentStruct.h */,
1E2CCF9315939E5D00D858D1 /* bestShiftStruct.h */,
1E2CCF9415939E5D00D858D1 /* hashMap.cpp */,
1E2CCF9515939E5D00D858D1 /* hashMap.h */,
1E2CCF9615939E5D00D858D1 /* hashMapInfos.cpp */,
1E2CCF9715939E5D00D858D1 /* hashMapInfos.h */,
1E2CCF9815939E5D00D858D1 /* hashMapStringInfos.cpp */,
1E2CCF9915939E5D00D858D1 /* hashMapStringInfos.h */,
1E2CCF9A15939E5D00D858D1 /* infosHasher.cpp */,
1E2CCF9B15939E5D00D858D1 /* infosHasher.h */,
1E2CCF9C15939E5D00D858D1 /* stringHasher.cpp */,
1E2CCF9D15939E5D00D858D1 /* stringHasher.h */,
1E2CCF9E15939E5D00D858D1 /* stringInfosHasher.cpp */,
1E2CCF9F15939E5D00D858D1 /* stringInfosHasher.h */,
1E2CCFA015939E5D00D858D1 /* terAlignment.cpp */,
1E2CCFA115939E5D00D858D1 /* terAlignment.h */,
1E2CCFA215939E5D00D858D1 /* tercalc.cpp */,
1E2CCFA315939E5D00D858D1 /* tercalc.h */,
1E2CCFA415939E5D00D858D1 /* terShift.cpp */,
1E2CCFA515939E5D00D858D1 /* terShift.h */,
1E2CCFA615939E5D00D858D1 /* tools.cpp */,
1E2CCFA715939E5D00D858D1 /* tools.h */,
);
name = TER;
path = ../../mert/TER;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
1E2CCF3115939E2D00D858D1 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
1E2CCFBA15939E5D00D858D1 /* BleuScorer.h in Headers */,
1E2CCFBD15939E5D00D858D1 /* CderScorer.h in Headers */,
1E2CCFBF15939E5D00D858D1 /* Data.h in Headers */,
1E2CCFC315939E5D00D858D1 /* Fdstream.h in Headers */,
1E2CCFC515939E5D00D858D1 /* FeatureArray.h in Headers */,
1E2CCFC715939E5D00D858D1 /* FeatureData.h in Headers */,
1E2CCFC915939E5D00D858D1 /* FeatureDataIterator.h in Headers */,
1E2CCFCC15939E5D00D858D1 /* FeatureStats.h in Headers */,
1E2CCFCE15939E5D00D858D1 /* FileStream.h in Headers */,
1E2CCFD015939E5D00D858D1 /* GzFileBuf.h in Headers */,
1E2CCFD215939E5D00D858D1 /* HypPackEnumerator.h in Headers */,
1E2CCFD415939E5D00D858D1 /* InterpolatedScorer.h in Headers */,
1E2CCFD815939E5D00D858D1 /* MergeScorer.h in Headers */,
1E2CCFDB15939E5D00D858D1 /* MiraFeatureVector.h in Headers */,
1E2CCFDD15939E5D00D858D1 /* MiraWeightVector.h in Headers */,
1E2CCFDE15939E5D00D858D1 /* Ngram.h in Headers */,
1E2CCFE115939E5D00D858D1 /* Optimizer.h in Headers */,
1E2CCFE315939E5D00D858D1 /* OptimizerFactory.h in Headers */,
1E2CCFE615939E5D00D858D1 /* PerScorer.h in Headers */,
1E2CCFE815939E5D00D858D1 /* Point.h in Headers */,
1E2CCFEB15939E5D00D858D1 /* PreProcessFilter.h in Headers */,
1E2CCFED15939E5D00D858D1 /* Reference.h in Headers */,
1E2CCFEF15939E5D00D858D1 /* ScopedVector.h in Headers */,
1E2CCFF115939E5D00D858D1 /* ScoreArray.h in Headers */,
1E2CCFF315939E5D00D858D1 /* ScoreData.h in Headers */,
1E2CCFF515939E5D00D858D1 /* ScoreDataIterator.h in Headers */,
1E2CCFF715939E5D00D858D1 /* Scorer.h in Headers */,
1E2CCFF915939E5D00D858D1 /* ScorerFactory.h in Headers */,
1E2CCFFB15939E5D00D858D1 /* ScoreStats.h in Headers */,
1E2CCFFD15939E5D00D858D1 /* SemposOverlapping.h in Headers */,
1E2CCFFF15939E5D00D858D1 /* SemposScorer.h in Headers */,
1E2CD00015939E5D00D858D1 /* Singleton.h in Headers */,
1E2CD00315939E5D00D858D1 /* alignmentStruct.h in Headers */,
1E2CD00415939E5D00D858D1 /* bestShiftStruct.h in Headers */,
1E2CD00615939E5D00D858D1 /* hashMap.h in Headers */,
1E2CD00815939E5D00D858D1 /* hashMapInfos.h in Headers */,
1E2CD00A15939E5D00D858D1 /* hashMapStringInfos.h in Headers */,
1E2CD00C15939E5D00D858D1 /* infosHasher.h in Headers */,
1E2CD00E15939E5D00D858D1 /* stringHasher.h in Headers */,
1E2CD01015939E5D00D858D1 /* stringInfosHasher.h in Headers */,
1E2CD01215939E5D00D858D1 /* terAlignment.h in Headers */,
1E2CD01415939E5D00D858D1 /* tercalc.h in Headers */,
1E2CD01615939E5D00D858D1 /* terShift.h in Headers */,
1E2CD01815939E5D00D858D1 /* tools.h in Headers */,
1E2CD01A15939E5D00D858D1 /* TerScorer.h in Headers */,
1E2CD01D15939E5D00D858D1 /* Timer.h in Headers */,
1E2CD01F15939E5D00D858D1 /* Types.h in Headers */,
1E2CD02115939E5D00D858D1 /* Util.h in Headers */,
1E2CD02415939E5D00D858D1 /* Vocabulary.h in Headers */,
1E3962211594CFF9006FE978 /* Permutation.h in Headers */,
1E3962251594D12C006FE978 /* SentenceLevelScorer.h in Headers */,
1EE52B561596B3E4006DC938 /* StatisticsBasedScorer.h in Headers */,
1E43CA3415973474000E29D3 /* PermutationScorer.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
1E2CCF3215939E2D00D858D1 /* mert_lib */ = {
isa = PBXNativeTarget;
buildConfigurationList = 1E2CCF3715939E2D00D858D1 /* Build configuration list for PBXNativeTarget "mert_lib" */;
buildPhases = (
1E2CCF2F15939E2D00D858D1 /* Sources */,
1E2CCF3015939E2D00D858D1 /* Frameworks */,
1E2CCF3115939E2D00D858D1 /* Headers */,
);
buildRules = (
);
dependencies = (
);
name = mert_lib;
productName = mert_lib;
productReference = 1E2CCF3315939E2D00D858D1 /* libmert_lib.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
1E2CCF2A15939E2D00D858D1 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1E2CCF2D15939E2D00D858D1 /* Build configuration list for PBXProject "mert_lib" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 1E2CCF2815939E2D00D858D1;
productRefGroup = 1E2CCF3415939E2D00D858D1 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
1E2CCF3215939E2D00D858D1 /* mert_lib */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
1E2CCF2F15939E2D00D858D1 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
1E2CCFB915939E5D00D858D1 /* BleuScorer.cpp in Sources */,
1E2CCFBC15939E5D00D858D1 /* CderScorer.cpp in Sources */,
1E2CCFBE15939E5D00D858D1 /* Data.cpp in Sources */,
1E2CCFC415939E5D00D858D1 /* FeatureArray.cpp in Sources */,
1E2CCFC615939E5D00D858D1 /* FeatureData.cpp in Sources */,
1E2CCFC815939E5D00D858D1 /* FeatureDataIterator.cpp in Sources */,
1E2CCFCB15939E5D00D858D1 /* FeatureStats.cpp in Sources */,
1E2CCFCD15939E5D00D858D1 /* FileStream.cpp in Sources */,
1E2CCFCF15939E5D00D858D1 /* GzFileBuf.cpp in Sources */,
1E2CCFD115939E5D00D858D1 /* HypPackEnumerator.cpp in Sources */,
1E2CCFD315939E5D00D858D1 /* InterpolatedScorer.cpp in Sources */,
1E2CCFD715939E5D00D858D1 /* MergeScorer.cpp in Sources */,
1E2CCFD915939E5D00D858D1 /* mert.cpp in Sources */,
1E2CCFDA15939E5D00D858D1 /* MiraFeatureVector.cpp in Sources */,
1E2CCFDC15939E5D00D858D1 /* MiraWeightVector.cpp in Sources */,
1E2CCFE015939E5D00D858D1 /* Optimizer.cpp in Sources */,
1E2CCFE215939E5D00D858D1 /* OptimizerFactory.cpp in Sources */,
1E2CCFE515939E5D00D858D1 /* PerScorer.cpp in Sources */,
1E2CCFE715939E5D00D858D1 /* Point.cpp in Sources */,
1E2CCFEA15939E5D00D858D1 /* PreProcessFilter.cpp in Sources */,
1E2CCFF015939E5D00D858D1 /* ScoreArray.cpp in Sources */,
1E2CCFF215939E5D00D858D1 /* ScoreData.cpp in Sources */,
1E2CCFF415939E5D00D858D1 /* ScoreDataIterator.cpp in Sources */,
1E2CCFF615939E5D00D858D1 /* Scorer.cpp in Sources */,
1E2CCFF815939E5D00D858D1 /* ScorerFactory.cpp in Sources */,
1E2CCFFA15939E5D00D858D1 /* ScoreStats.cpp in Sources */,
1E2CCFFC15939E5D00D858D1 /* SemposOverlapping.cpp in Sources */,
1E2CCFFE15939E5D00D858D1 /* SemposScorer.cpp in Sources */,
1E2CD00215939E5D00D858D1 /* alignmentStruct.cpp in Sources */,
1E2CD00515939E5D00D858D1 /* hashMap.cpp in Sources */,
1E2CD00715939E5D00D858D1 /* hashMapInfos.cpp in Sources */,
1E2CD00915939E5D00D858D1 /* hashMapStringInfos.cpp in Sources */,
1E2CD00B15939E5D00D858D1 /* infosHasher.cpp in Sources */,
1E2CD00D15939E5D00D858D1 /* stringHasher.cpp in Sources */,
1E2CD00F15939E5D00D858D1 /* stringInfosHasher.cpp in Sources */,
1E2CD01115939E5D00D858D1 /* terAlignment.cpp in Sources */,
1E2CD01315939E5D00D858D1 /* tercalc.cpp in Sources */,
1E2CD01515939E5D00D858D1 /* terShift.cpp in Sources */,
1E2CD01715939E5D00D858D1 /* tools.cpp in Sources */,
1E2CD01915939E5D00D858D1 /* TerScorer.cpp in Sources */,
1E2CD01C15939E5D00D858D1 /* Timer.cpp in Sources */,
1E2CD02015939E5D00D858D1 /* Util.cpp in Sources */,
1E2CD02315939E5D00D858D1 /* Vocabulary.cpp in Sources */,
1E39621B1594CFD1006FE978 /* PermutationScorer.cpp in Sources */,
1E3962201594CFF9006FE978 /* Permutation.cpp in Sources */,
1E3962231594D0FF006FE978 /* SentenceLevelScorer.cpp in Sources */,
1EE52B591596B3FC006DC938 /* StatisticsBasedScorer.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
1E2CCF3515939E2D00D858D1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
1E2CCF3615939E2D00D858D1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
SDKROOT = macosx;
};
name = Release;
};
1E2CCF3815939E2D00D858D1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
EXECUTABLE_PREFIX = lib;
HEADER_SEARCH_PATHS = (
../..,
/opt/local/include,
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
1E2CCF3915939E2D00D858D1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
EXECUTABLE_PREFIX = lib;
HEADER_SEARCH_PATHS = (
../..,
/opt/local/include,
);
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
1E2CCF2D15939E2D00D858D1 /* Build configuration list for PBXProject "mert_lib" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1E2CCF3515939E2D00D858D1 /* Debug */,
1E2CCF3615939E2D00D858D1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
1E2CCF3715939E2D00D858D1 /* Build configuration list for PBXNativeTarget "mert_lib" */ = {
isa = XCConfigurationList;
buildConfigurations = (
1E2CCF3815939E2D00D858D1 /* Debug */,
1E2CCF3915939E2D00D858D1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 1E2CCF2A15939E2D00D858D1 /* Project object */;
}

0
contrib/web/bin/daemon.pl Normal file → Executable file
View File

View File

@ -44,7 +44,7 @@ GITREPO="$MCC_GITREPO"
# location of moses regression test data archive (assumes url at the moment)
REGTEST_ARCHIVE="$MCC_REGTEST_ARCHIVE"
[ -n "$REGTEST_ARCHIVE" ] \
|| REGTEST_ARCHIVE="http://www.statmt.org/moses/reg-testing/moses-reg-test-data-10.tgz"
|| REGTEST_ARCHIVE="http://www.statmt.org/moses/reg-testing/moses-reg-test-data-12.tgz"
if [ ! -d "$WORKDIR" ]; then
mkdir "$WORKDIR" || die "Failed to create workdir $WORKDIR"

View File

@ -13,8 +13,13 @@ rule _shell ( cmd : extras * ) {
return [ trim-nl [ SHELL $(cmd) : $(extras) ] ] ;
}
cxxflags = [ os.environ "CXXFLAGS" ] ;
cflags = [ os.environ "CFLAGS" ] ;
ldflags = [ os.environ "LDFLAGS" ] ;
#Run g++ with empty main and these arguments to see if it passes.
rule test_flags ( flags * ) {
flags = $(cxxflags) $(ldflags) $(flags) ;
local cmd = "bash -c \"g++ "$(flags:J=" ")" -x c++ - <<<'int main() {}' -o /dev/null >/dev/null 2>/dev/null\"" ;
local ret = [ SHELL $(cmd) : exit-status ] ;
if --debug-configuration in [ modules.peek : ARGV ] {
@ -28,6 +33,14 @@ rule test_flags ( flags * ) {
}
}
rule test_header ( name ) {
return [ test_flags "-include $(name)" ] ;
}
rule test_library ( name ) {
return [ test_flags "-l$(name)" ] ;
}
{
local cleaning = [ option.get "clean" : : yes ] ;
cleaning ?= [ option.get "clean-all" : no : yes ] ;
@ -60,6 +73,7 @@ if $(with-macports) {
}
else {
with-boost = [ option.get "with-boost" ] ;
with-boost ?= [ os.environ "BOOST_ROOT" ] ;
if $(with-boost) {
L-boost-search = -L$(with-boost)/lib" "-L$(with-boost)/lib64 ;
boost-search = <search>$(with-boost)/lib <search>$(with-boost)/lib64 ;
@ -134,10 +148,6 @@ rule external-lib ( name : search-path * ) {
requirements = ;
{
local cxxflags = [ os.environ "CXXFLAGS" ] ;
local cflags = [ os.environ "CFLAGS" ] ;
local ldflags = [ os.environ "LDFLAGS" ] ;
#Boost jam's static clang for Linux is buggy.
requirements += <cxxflags>$(cxxflags) <cflags>$(cflags) <linkflags>$(ldflags) <os>LINUX,<toolset>clang:<link>shared ;
@ -163,9 +173,9 @@ if $(prefix) {
prefix = $(TOP)$(GITTAG) ;
}
bindir = [ option.get "bindir" : $(prefix)/bin ] ;
libdir = [ option.get "libdir" : $(prefix)/lib ] ;
rule install-bin-libs ( deps * ) {
local bindir = [ option.get "bindir" : $(prefix)/bin ] ;
local libdir = [ option.get "libdir" : $(prefix)/lib ] ;
install prefix-bin : $(deps) : <location>$(bindir) <install-dependencies>on <install-type>EXE <link>shared:<dll-path>$(libdir) ;
install prefix-lib : $(deps) : <location>$(libdir) <install-dependencies>on <install-type>LIB <link>shared:<dll-path>$(libdir) ;
}
@ -174,3 +184,9 @@ rule install-headers ( name : list * : source-root ? ) {
source-root ?= "." ;
install $(name) : $(list) : <location>$(includedir) <install-source-root>$(source-root) ;
}
rule build-projects ( projects * ) {
for p in $(projects) {
build-project $(p) ;
}
}

View File

@ -162,7 +162,7 @@ void BleuScorer::prepareStats(size_t sid, const string& text, ScoreStats& entry)
entry.set(stats);
}
float BleuScorer::calculateScore(const vector<int>& comps) const
statscore_t BleuScorer::calculateScore(const vector<int>& comps) const
{
CHECK(comps.size() == kBleuNgramOrder * 2 + 1);

View File

@ -7,7 +7,7 @@
#include "Types.h"
#include "ScoreData.h"
#include "Scorer.h"
#include "StatisticsBasedScorer.h"
#include "ScopedVector.h"
const int kBleuNgramOrder = 4;
@ -32,7 +32,7 @@ public:
virtual void setReferenceFiles(const std::vector<std::string>& referenceFiles);
virtual void prepareStats(std::size_t sid, const std::string& text, ScoreStats& entry);
virtual float calculateScore(const std::vector<int>& comps) const;
virtual statscore_t calculateScore(const std::vector<int>& comps) const;
virtual std::size_t NumberOfScores() const { return 2 * kBleuNgramOrder + 1; }
int CalcReferenceLength(std::size_t sentence_id, std::size_t length);

View File

@ -4,7 +4,7 @@
#include <string>
#include <vector>
#include "Types.h"
#include "Scorer.h"
#include "StatisticsBasedScorer.h"
/**
* CderScorer class can compute both CDER and WER metric.

View File

@ -45,6 +45,10 @@ CderScorer.cpp
MergeScorer.cpp
Vocabulary.cpp
PreProcessFilter.cpp
SentenceLevelScorer.cpp
Permutation.cpp
PermutationScorer.cpp
StatisticsBasedScorer.cpp
../util//kenutil m ..//z ;
exe mert : mert.cpp mert_lib ../moses/src//ThreadPool ;

View File

@ -4,7 +4,7 @@
#include <string>
#include <vector>
#include "Scorer.h"
#include "StatisticsBasedScorer.h"
class PerScorer;
class ScoreStats;

View File

@ -5,7 +5,7 @@
#include <string>
#include <vector>
#include "Types.h"
#include "Scorer.h"
#include "StatisticsBasedScorer.h"
class ScoreStats;

320
mert/Permutation.cpp Normal file
View File

@ -0,0 +1,320 @@
/*
* Permutation.cpp
* met - Minimum Error Training
*
* Created by Alexandra Birch 18/11/09.
*
*/
#include <fstream>
#include <sstream>
#include <math.h>
#include "Permutation.h"
#include "Util.h"
using namespace std;
Permutation::Permutation(const string &alignment, const int sourceLength, const int targetLength )
{
if (sourceLength > 0) {
set(alignment, sourceLength);
}
m_targetLength = targetLength;
}
size_t Permutation::getLength() const
{
return int(m_array.size());
}
void Permutation::dump() const
{
int j=0;
for (vector<int>::const_iterator i = m_array.begin(); i !=m_array.end(); i++) {
cout << "(";
cout << j << ":" << *i ;
cout << "), ";
j++;
}
cout << endl;
}
//Sent alignment string
//Eg: "0-1 0-0 1-2 3-0 4-5 6-7 "
// Inidiviual word alignments which can be one-one,
// or null aligned, or many-many. The format is sourcepos - targetpos
//Its the output of the berkley aligner subtracting 1 from each number
//sourceLength needed because last source words might not be aligned
void Permutation::set(const string & alignment,const int sourceLength)
{
//cout << "******** Permutation::set :" << alignment << ": len : " << sourceLength <<endl;
if(sourceLength <= 0) {
//not found
cerr << "Source sentence length not positive:"<< sourceLength << endl;
exit(0);
}
if (alignment.length() <= 0) {
//alignment empty - could happen but not good
cerr << "Alignment string empty:"<< alignment << endl;
}
//Tokenise on whitespace
string buf; // Have a buffer string
stringstream ss(alignment); // Insert the string into a stream
vector<string> tokens; // Create vector to hold our words
while (ss >> buf)
tokens.push_back(buf);
vector<int> tempPerm(sourceLength, -1);
//Set tempPerm to have one target position per source position
for (size_t i=0; i<tokens.size(); i++) {
string temp = tokens[i];
int posDelimeter = temp.find("-");
if(posDelimeter == int(string::npos)) {
cerr << "Delimiter not found - :"<< tokens[i] << endl;
exit(1);
}
int sourcePos = atoi((temp.substr(0, posDelimeter)).c_str());
int targetPos = atoi((temp.substr(posDelimeter+1)).c_str());
//cout << "SP:" << sourcePos << " TP:" << targetPos << endl;
if (sourcePos > sourceLength) {
cerr << "Source sentence length:" << sourceLength << " is smaller than alignment source position:" << sourcePos << endl;
exit(1);
}
//If have multiple target pos aligned to one source,
// then ignore all but first alignment
if (tempPerm[sourcePos] == -1 || tempPerm[sourcePos] > targetPos) {
tempPerm[sourcePos] = targetPos;
}
}
//TODO
//Set final permutation in m_array
//Take care of: source - null
// multiple_source - one target
// unaligned target
// Input: 1-9 2-1 4-3 4-4 5-6 6-6 7-6 8-8
// Convert source: 1 2 3 4 5 6 7 8
// target: 9 1 -1 3 6 6 6 8 -> 8 1 2 3 4 5 6 7
// 1st step: Add null aligned source to previous alignment
// target: 9 1 -1 3 6 6 6 8 -> 9 1 1 3 6 6 6 8
int last=0;
m_array.assign(sourceLength, -1);
//get a searcheable index
multimap<int, int> invMap;
multimap<int, int>::iterator it;
//cout << " SourceP -> TargetP " << endl;
for (size_t i=0; i<tempPerm.size(); i++) {
if (tempPerm[i] == -1) {
tempPerm[i] = last;
} else {
last = tempPerm[i];
}
//cout << i << " -> " << tempPerm[i] << endl;
//Key is target pos, value is source pos
invMap.insert(pair<int,int>(tempPerm[i],int(i)));
}
// 2nd step: Get target into index of multimap and sort
// Convert source: 1 2 3 4 5 6 7 8
// target: 9 1 0 3 6 6 6 8 -> 0 1 3 6 6 6 8 9
// source: 3 2 4 5 6 7 8 1
int i=0;
//cout << " TargetP => SourceP : TargetIndex " << endl;
for ( it=invMap.begin() ; it != invMap.end(); it++ ) {
//cout << (*it).first << " => " << (*it).second << " : " << i << endl;
//find source position
m_array[(*it).second] = i;
i++;
}
bool ok = checkValidPermutation(m_array);
//dump();
if (!ok) {
throw runtime_error(" Created invalid permutation");
}
}
//Static
vector<int> Permutation::invert(const vector<int> & inVector)
{
vector<int> outVector(inVector.size());
for (size_t i=0; i<inVector.size(); i++) {
outVector[inVector[i]] = int(i);
}
return outVector;
}
//Static
//Permutations start at 0
bool Permutation::checkValidPermutation(vector<int> const & inVector)
{
vector<int> test(inVector.size(),-1);
for (size_t i=0; i< inVector.size(); i++) {
//No multiple entries of same value allowed
if (test[inVector[i]] > -1) {
cerr << "Permutation error: multiple entries of same value\n" << endl;
return false;
}
test[inVector[i]] ++;
}
for (size_t i=0; i<inVector.size(); i++) {
//No holes allowed
if (test[inVector[i]] == -1) {
cerr << "Permutation error: missing values\n" << endl;
return false;
}
}
return true;
}
//TODO default to HAMMING
//Note: it returns the distance that is not normalised
float Permutation::distance(const Permutation &permCompare, const distanceMetric_t &type) const
{
float score=0;
//cout << "*****Permutation::distance" <<endl;
//cout << "Ref:" << endl;
//dump();
//cout << "Comp:" << endl;
//permCompare.dump();
if (type == HAMMING_DISTANCE) {
score = calculateHamming(permCompare);
} else if (type == KENDALL_DISTANCE) {
score = calculateKendall(permCompare);
} else {
throw runtime_error("Distance type not valid");
}
float brevityPenalty = 1.0 - (float) permCompare.getTargetLength()/getTargetLength() ;//reflength divided by trans length
if (brevityPenalty < 0.0) {
score = score * exp(brevityPenalty);
}
//cout << "Distance type:" << type << endl;
//cout << "Score: "<< score << endl;
return score;
}
float Permutation::calculateHamming(const Permutation & compare) const
{
float score=0;
vector<int> compareArray = compare.getArray();
if (getLength() != compare.getLength()) {
cerr << "1stperm: " << getLength() << " 2ndperm: " << compare.getLength() << endl;
throw runtime_error("Length of permutations not equal");
}
if (getLength() == 0) {
cerr << "Empty permutation" << endl;
return 0;
}
for (size_t i=0; i<getLength(); i++) {
if (m_array[i] != compareArray[i]) {
score++;
}
}
score = 1 - (score / getLength());
return score;
}
float Permutation::calculateKendall(const Permutation & compare) const
{
float score=0;
vector<int> compareArray = compare.getArray();
if (getLength() != compare.getLength()) {
cerr << "1stperm: " << getLength() << " 2ndperm: " << compare.getLength() << endl;
throw runtime_error("Length of permutations not equal");
}
if (getLength() == 0) {
cerr << "Empty permutation" << endl;
return 0;
}
for (size_t i=0; i<getLength(); i++) {
for (size_t j=0; j<getLength(); j++) {
if ((m_array[i] < m_array[j]) && (compareArray[i] > compareArray[j])) {
score++;
}
}
}
score = (score / ((getLength()*getLength() - getLength()) /2 ) );
//Adjusted Kendall's tau correlates better with human judgements
score = sqrt (score);
score = 1 - score;
return score;
}
vector<int> Permutation::getArray() const
{
vector<int> ret = m_array;
return ret;
}
//Static
//This function is called with test which is
// the 5th field in moses nbest output when called with -include-alignment-in-n-best
//eg. 0=0 1-2=1-2 3=3 4=4 5=5 6=6 7-9=7-8 10=9 11-13=10-11 (source-target)
string Permutation::convertMosesToStandard(string const & alignment)
{
if (alignment.length() == 0) {
cerr << "Alignment input string empty" << endl;
}
string working = alignment;
string out;
stringstream oss;
while (working.length() > 0) {
string align;
getNextPound(working,align," ");
//If found an alignment
if (align.length() > 0) {
size_t posDelimeter = align.find("=");
if(posDelimeter== string::npos) {
cerr << "Delimiter not found = :"<< align << endl;
exit(0);
}
int firstSourcePos,lastSourcePos,firstTargetPos,lastTargetPos;
string sourcePoss = align.substr(0, posDelimeter);
string targetPoss = align.substr(posDelimeter+1);
posDelimeter = sourcePoss.find("-");
if(posDelimeter < string::npos) {
firstSourcePos = atoi((sourcePoss.substr(0, posDelimeter)).c_str());
lastSourcePos = atoi((sourcePoss.substr(posDelimeter+1)).c_str());
} else {
firstSourcePos = atoi(sourcePoss.c_str());
lastSourcePos = firstSourcePos;
}
posDelimeter = targetPoss.find("-");
if(posDelimeter < string::npos) {
firstTargetPos = atoi((targetPoss.substr(0, posDelimeter)).c_str());
lastTargetPos = atoi((targetPoss.substr(posDelimeter+1)).c_str());
} else {
firstTargetPos = atoi(targetPoss.c_str());
lastTargetPos = firstTargetPos;
}
for (int i = firstSourcePos; i <= lastSourcePos; i++) {
for (int j = firstTargetPos; j <= lastTargetPos; j++) {
oss << i << "-" << j << " ";
}
}
} //else case where two spaces ?
}
out = oss.str();
//cout << "ConverttoStandard: " << out << endl;
return out;
}

66
mert/Permutation.h Normal file
View File

@ -0,0 +1,66 @@
/*
* Permutation.h
* met - Minimum Error Training
*
* Created by Alexandra Birch 18 Nov 2009.
*
*/
#ifndef PERMUTATION_H
#define PERMUTATION_H
#include <limits>
#include <vector>
#include <iostream>
#include <fstream>
#include "Util.h"
class Permutation
{
public:
//Can be HAMMING_DISTANCE or KENDALLS_DISTANCE
Permutation(const std::string &alignment = std::string(), const int sourceLength = 0, const int targetLength = 0 );
~Permutation() {};
inline void clear() {
m_array.clear();
}
inline size_t size() {
return m_array.size();
}
void set(const std::string &alignment,const int sourceLength);
float distance(const Permutation &permCompare, const distanceMetric_t &strategy = HAMMING_DISTANCE) const;
//Const
void dump() const;
size_t getLength() const;
std::vector<int> getArray() const;
int getTargetLength() const {
return m_targetLength;
}
//Static
static std::string convertMosesToStandard(std::string const & alignment);
static std::vector<int> invert(std::vector<int> const & inVector);
static bool checkValidPermutation(std::vector<int> const & inVector);
protected:
std::vector<int> m_array;
int m_targetLength;
float calculateHamming(const Permutation & compare) const;
float calculateKendall(const Permutation & compare) const;
private:
};
#endif

216
mert/PermutationScorer.cpp Normal file
View File

@ -0,0 +1,216 @@
#include <cassert>
#include "PermutationScorer.h"
using namespace std;
const int PermutationScorer::SCORE_PRECISION = 5;
PermutationScorer::PermutationScorer(const string &distanceMetric, const string &config)
:StatisticsBasedScorer(distanceMetric,config)
{
//configure regularisation
static string KEY_REFCHOICE = "refchoice";
static string REFCHOICE_AVERAGE = "average";
static string REFCHOICE_CLOSEST = "closest";
string refchoice = getConfig(KEY_REFCHOICE,REFCHOICE_CLOSEST);
if (refchoice == REFCHOICE_AVERAGE) {
m_refChoiceStrategy = REFERENCE_CHOICE_AVERAGE;
} else if (refchoice == REFCHOICE_CLOSEST) {
m_refChoiceStrategy = REFERENCE_CHOICE_CLOSEST;
} else {
throw runtime_error("Unknown reference choice strategy: " + refchoice);
}
cerr << "Using reference choice strategy: " << refchoice << endl;
if (distanceMetric.compare("HAMMING") == 0) {
m_distanceMetric = HAMMING_DISTANCE;
} else if (distanceMetric.compare("KENDALL") == 0) {
m_distanceMetric = KENDALL_DISTANCE;
}
cerr << "Using permutation distance metric: " << distanceMetric << endl;
//Get reference alignments from scconfig refalign option
static string KEY_ALIGNMENT_FILES = "refalign";
string refalign = getConfig(KEY_ALIGNMENT_FILES,"");
//cout << refalign << endl;
if (refalign.length() > 0) {
string substring;
while (!refalign.empty()) {
getNextPound(refalign, substring, "+");
m_referenceAlignments.push_back(substring);
}
}
//Get length of source sentences read in from scconfig source option
// this is essential for extractor but unneccesary for mert executable
static string KEY_SOURCE_FILE = "source";
string sourceFile = getConfig(KEY_SOURCE_FILE,"");
if (sourceFile.length() > 0) {
cerr << "Loading source sentence lengths from " << sourceFile << endl;
ifstream sourcein(sourceFile.c_str());
if (!sourcein) {
throw runtime_error("Unable to open: " + sourceFile);
}
string line;
while (getline(sourcein,line)) {
size_t wordNumber = 0;
string word;
while(!line.empty()) {
getNextPound(line, word, " ");
wordNumber++;
}
m_sourceLengths.push_back(wordNumber);
}
sourcein.close();
}
}
void PermutationScorer::setReferenceFiles(const vector<string>& referenceFiles)
{
cout << "*******setReferenceFiles" << endl;
//make sure reference data is clear
m_referencePerms.clear();
vector< vector< int> > targetLengths;
//Just getting target length from reference text file
for (size_t i = 0; i < referenceFiles.size(); ++i) {
vector <int> lengths;
cout << "Loading reference from " << referenceFiles[i] << endl;
ifstream refin(referenceFiles[i].c_str());
if (!refin) {
cerr << "Unable to open: " << referenceFiles[i] << endl;
throw runtime_error("Unable to open alignment file");
}
string line;
while (getline(refin,line)) {
int count = getNumberWords(line);
lengths.push_back(count);
}
targetLengths.push_back(lengths);
}
//load reference data
//NOTE ignoring normal reference file, only using previously saved alignment reference files
for (size_t i = 0; i < m_referenceAlignments.size(); ++i) {
vector<Permutation> referencePerms;
cout << "Loading reference from " << m_referenceAlignments[i] << endl;
ifstream refin(m_referenceAlignments[i].c_str());
if (!refin) {
cerr << "Unable to open: " << m_referenceAlignments[i] << endl;
throw runtime_error("Unable to open alignment file");
}
string line;
size_t sid = 0; //sentence counter
while (getline(refin,line)) {
//cout << line << endl;
//Line needs to be of the format: 0-0 1-1 1-2 etc source-target
Permutation perm(line, m_sourceLengths[sid],targetLengths[i][sid]);
//perm.dump();
referencePerms.push_back(perm);
//check the source sentence length is the same for previous file
if (perm.getLength() != m_sourceLengths[sid]) {
cerr << "Permutation Length: " << perm.getLength() << endl;
cerr << "Source length: " << m_sourceLengths[sid] << " for sid " << sid << endl;
throw runtime_error("Source sentence lengths not the same: ");
}
sid++;
}
m_referencePerms.push_back(referencePerms);
}
}
int PermutationScorer::getNumberWords (const string& text) const
{
int count = 0;
string line = trimStr(text);
if (line.length()>0) {
int pos = line.find(" ");
while (pos!=int(string::npos)) {
count++;
pos = line.find(" ",pos+1);
}
count++;
}
return count;
}
void PermutationScorer::prepareStats(size_t sid, const string& text, ScoreStats& entry)
{
//cout << "*******prepareStats" ;
//cout << text << endl;
//cout << sid << endl;
//cout << "Reference0align:" << endl;
//m_referencePerms[0][sid].dump();
string sentence = "";
string align = text;
size_t alignmentData = text.find("|||");
//Get sentence and alignment parts
if(alignmentData != string::npos) {
getNextPound(align,sentence, "|||");
} else {
align = text;
}
int translationLength = getNumberWords(sentence);
//A vector of Permutations for each sentence
vector< vector<Permutation> > nBestPerms;
float distanceValue;
//need to create permutations for each nbest line
string standardFormat = Permutation::convertMosesToStandard(align);
Permutation perm(standardFormat, m_sourceLengths[sid],translationLength);
//perm.dump();
if (m_refChoiceStrategy == REFERENCE_CHOICE_AVERAGE) {
float total = 0;
for (size_t i = 0; i < m_referencePerms.size(); ++i) {
float dist = perm.distance(m_referencePerms[i][sid], m_distanceMetric);
total += dist;
//cout << "Ref number: " << i << " distance: " << dist << endl;
}
float mean = (float)total/m_referencePerms.size();
//cout << "MultRef strategy AVERAGE: total " << total << " mean " << mean << " number " << m_referencePerms.size() << endl;
distanceValue = mean;
} else if (m_refChoiceStrategy == REFERENCE_CHOICE_CLOSEST) {
float max_val = 0;
for (size_t i = 0; i < m_referencePerms.size(); ++i) {
//look for the closest reference
float value = perm.distance(m_referencePerms[i][sid], m_distanceMetric);
//cout << "Ref number: " << i << " distance: " << value << endl;
if (value > max_val) {
max_val = value;
}
}
distanceValue = max_val;
//cout << "MultRef strategy CLOSEST: max_val " << distanceValue << endl;
} else {
throw runtime_error("Unsupported reflength strategy");
}
//SCOREROUT eg: 0.04546
ostringstream tempStream;
tempStream.precision(SCORE_PRECISION);
tempStream << distanceValue;
string str = tempStream.str();
entry.set(str);
//cout << tempStream.str();
}
//Will just be final score
statscore_t PermutationScorer::calculateScore(const vector<int>& comps) const
{
//cerr << "*******PermutationScorer::calculateScore" ;
//cerr << " " << comps[0] << endl;
return comps[0];
}

65
mert/PermutationScorer.h Normal file
View File

@ -0,0 +1,65 @@
#ifndef __PERMUTATIONSCORER_H__
#define __PERMUTATIONSCORER_H__
#include <algorithm>
#include <cmath>
#include <iostream>
#include <iterator>
#include <set>
#include <sstream>
#include <stdexcept>
#include <string>
#include <vector>
#include <limits.h>
#include "Types.h"
#include "ScoreData.h"
#include "Scorer.h"
#include "Permutation.h"
#include "StatisticsBasedScorer.h"
/**
* Permutation
**/
class PermutationScorer: public StatisticsBasedScorer
{
public:
PermutationScorer(const std::string &distanceMetric = "HAMMING",
const std::string &config = std::string());
void setReferenceFiles(const std::vector<std::string>& referenceFiles);
void prepareStats(size_t sid, const std::string& text, ScoreStats& entry);
static const int SCORE_PRECISION;
size_t NumberOfScores() const {
//cerr << "PermutationScorer number of scores: 1" << endl;
return 1;
};
bool useAlignment() const {
//cout << "PermutationScorer::useAlignment returning true" << endl;
return true;
};
protected:
statscore_t calculateScore(const std::vector<int>& scores) const;
PermutationScorer(const PermutationScorer&);
~PermutationScorer() {};
PermutationScorer& operator=(const PermutationScorer&);
int getNumberWords (const std::string & line) const;
distanceMetricReferenceChoice_t m_refChoiceStrategy;
distanceMetric_t m_distanceMetric;
// data extracted from reference files
// A vector of permutations for each reference file
std::vector< std::vector<Permutation> > m_referencePerms;
std::vector<size_t> m_sourceLengths;
std::vector<std::string> m_referenceAlignments;
private:
};
//TODO need to read in floats for scores - necessary for selecting mean reference strategy and for BLEU?
#endif //__PERMUTATIONSCORER_H

View File

@ -8,36 +8,6 @@
using namespace std;
namespace {
//regularisation strategies
inline float score_min(const statscores_t& scores, size_t start, size_t end)
{
float min = numeric_limits<float>::max();
for (size_t i = start; i < end; ++i) {
if (scores[i] < min) {
min = scores[i];
}
}
return min;
}
inline float score_average(const statscores_t& scores, size_t start, size_t end)
{
if ((end - start) < 1) {
// this shouldn't happen
return 0;
}
float total = 0;
for (size_t j = start; j < end; ++j) {
total += scores[j];
}
return total / (end - start);
}
} // namespace
Scorer::Scorer(const string& name, const string& config)
: m_name(name),
m_vocab(mert::VocabularyFactory::GetVocabulary()),
@ -160,110 +130,10 @@ string Scorer::applyFilter(const string& sentence) const
}
}
StatisticsBasedScorer::StatisticsBasedScorer(const string& name, const string& config)
: Scorer(name,config) {
//configure regularisation
static string KEY_TYPE = "regtype";
static string KEY_WINDOW = "regwin";
static string KEY_CASE = "case";
static string TYPE_NONE = "none";
static string TYPE_AVERAGE = "average";
static string TYPE_MINIMUM = "min";
static string TRUE = "true";
static string FALSE = "false";
string type = getConfig(KEY_TYPE,TYPE_NONE);
if (type == TYPE_NONE) {
m_regularization_type = NONE;
} else if (type == TYPE_AVERAGE) {
m_regularization_type = AVERAGE;
} else if (type == TYPE_MINIMUM) {
m_regularization_type = MINIMUM;
} else {
throw runtime_error("Unknown scorer regularisation strategy: " + type);
}
// cerr << "Using scorer regularisation strategy: " << type << endl;
const string& window = getConfig(KEY_WINDOW, "0");
m_regularization_window = atoi(window.c_str());
// cerr << "Using scorer regularisation window: " << m_regularization_window << endl;
const string& preserve_case = getConfig(KEY_CASE,TRUE);
if (preserve_case == TRUE) {
m_enable_preserve_case = true;
} else if (preserve_case == FALSE) {
m_enable_preserve_case = false;
}
// cerr << "Using case preservation: " << m_enable_preserve_case << endl;
float Scorer::score(const candidates_t& candidates) const {
diffs_t diffs;
statscores_t scores;
score(candidates, diffs, scores);
return scores[0];
}
void StatisticsBasedScorer::score(const candidates_t& candidates, const diffs_t& diffs,
statscores_t& scores) const
{
if (!m_score_data) {
throw runtime_error("Score data not loaded");
}
// calculate the score for the candidates
if (m_score_data->size() == 0) {
throw runtime_error("Score data is empty");
}
if (candidates.size() == 0) {
throw runtime_error("No candidates supplied");
}
int numCounts = m_score_data->get(0,candidates[0]).size();
vector<int> totals(numCounts);
for (size_t i = 0; i < candidates.size(); ++i) {
ScoreStats stats = m_score_data->get(i,candidates[i]);
if (stats.size() != totals.size()) {
stringstream msg;
msg << "Statistics for (" << "," << candidates[i] << ") have incorrect "
<< "number of fields. Found: " << stats.size() << " Expected: "
<< totals.size();
throw runtime_error(msg.str());
}
for (size_t k = 0; k < totals.size(); ++k) {
totals[k] += stats.get(k);
}
}
scores.push_back(calculateScore(totals));
candidates_t last_candidates(candidates);
// apply each of the diffs, and get new scores
for (size_t i = 0; i < diffs.size(); ++i) {
for (size_t j = 0; j < diffs[i].size(); ++j) {
size_t sid = diffs[i][j].first;
size_t nid = diffs[i][j].second;
size_t last_nid = last_candidates[sid];
for (size_t k = 0; k < totals.size(); ++k) {
int diff = m_score_data->get(sid,nid).get(k)
- m_score_data->get(sid,last_nid).get(k);
totals[k] += diff;
}
last_candidates[sid] = nid;
}
scores.push_back(calculateScore(totals));
}
// Regularisation. This can either be none, or the min or average as described in
// Cer, Jurafsky and Manning at WMT08.
if (m_regularization_type == NONE || m_regularization_window <= 0) {
// no regularisation
return;
}
// window size specifies the +/- in each direction
statscores_t raw_scores(scores); // copy scores
for (size_t i = 0; i < scores.size(); ++i) {
size_t start = 0;
if (i >= m_regularization_window) {
start = i - m_regularization_window;
}
const size_t end = min(scores.size(), i + m_regularization_window + 1);
if (m_regularization_type == AVERAGE) {
scores[i] = score_average(raw_scores,start,end);
} else {
scores[i] = score_min(raw_scores,start,end);
}
}
}

View File

@ -6,6 +6,7 @@
#include <stdexcept>
#include <string>
#include <vector>
#include <limits>
#include "Types.h"
#include "ScoreData.h"
@ -18,6 +19,8 @@ class Vocabulary;
} // namespace mert
enum ScorerRegularisationStrategy {REG_NONE, REG_AVERAGE, REG_MINIMUM};
/**
* Superclass of all scorers and dummy implementation.
*
@ -77,12 +80,7 @@ class Scorer
* Calculate the score of the sentences corresponding to the list of candidate
* indices. Each index indicates the 1-best choice from the n-best list.
*/
float score(const candidates_t& candidates) const {
diffs_t diffs;
statscores_t scores;
score(candidates, diffs, scores);
return scores[0];
}
float score(const candidates_t& candidates) const;
const std::string& getName() const {
return m_name;
@ -165,34 +163,35 @@ class Scorer
};
/**
* Abstract base class for Scorers that work by adding statistics across all
* outout sentences, then apply some formula, e.g., BLEU, PER.
*/
class StatisticsBasedScorer : public Scorer
{
public:
StatisticsBasedScorer(const std::string& name, const std::string& config);
virtual ~StatisticsBasedScorer() {}
virtual void score(const candidates_t& candidates, const diffs_t& diffs,
statscores_t& scores) const;
namespace {
//regularisation strategies
inline float score_min(const statscores_t& scores, size_t start, size_t end)
{
float min = std::numeric_limits<float>::max();
for (size_t i = start; i < end; ++i) {
if (scores[i] < min) {
min = scores[i];
}
}
return min;
}
inline float score_average(const statscores_t& scores, size_t start, size_t end)
{
if ((end - start) < 1) {
// this shouldn't happen
return 0;
}
float total = 0;
for (size_t j = start; j < end; ++j) {
total += scores[j];
}
return total / (end - start);
}
} // namespace
protected:
enum RegularisationType {
NONE,
AVERAGE,
MINIMUM
};
/**
* Calculate the actual score.
*/
virtual statscore_t calculateScore(const std::vector<int>& totals) const = 0;
// regularisation
RegularisationType m_regularization_type;
std::size_t m_regularization_window;
};
#endif // MERT_SCORER_H_

View File

@ -9,6 +9,7 @@
#include "MergeScorer.h"
#include "InterpolatedScorer.h"
#include "SemposScorer.h"
#include "PermutationScorer.h"
using namespace std;
@ -21,6 +22,7 @@ vector<string> ScorerFactory::getTypes() {
types.push_back(string("WER"));
types.push_back(string("MERGE"));
types.push_back(string("SEMPOS"));
types.push_back(string("LRSCORE"));
return types;
}
@ -40,6 +42,8 @@ Scorer* ScorerFactory::getScorer(const string& type, const string& config) {
return new SemposScorer(config);
} else if (type == "MERGE") {
return new MergeScorer(config);
} else if (type == "LRSCORE") {
return new PermutationScorer(config);
} else {
if (type.find(',') != string::npos) {
return new InterpolatedScorer(type, config);

View File

@ -15,6 +15,7 @@
// However, currently SemposScorer uses a bunch of typedefs, which are
// used in SemposScorer as well as inherited SemposOverlapping classes.
#include "SemposOverlapping.h"
#include "StatisticsBasedScorer.h"
/**
* This class represents sempos based metrics.

View File

@ -0,0 +1,102 @@
//
// SentenceLevelScorer.cpp
// mert_lib
//
// Created by Hieu Hoang on 22/06/2012.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//
#include <iostream>
#include "SentenceLevelScorer.h"
using namespace std;
/** The sentence level scores have already been calculated, just need to average them
and include the differences. Allows scores which are floats **/
void SentenceLevelScorer::score(const candidates_t& candidates, const diffs_t& diffs,
statscores_t& scores)
{
//cout << "*******SentenceLevelScorer::score" << endl;
if (!m_score_data) {
throw runtime_error("Score data not loaded");
}
//calculate the score for the candidates
if (m_score_data->size() == 0) {
throw runtime_error("Score data is empty");
}
if (candidates.size() == 0) {
throw runtime_error("No candidates supplied");
}
int numCounts = m_score_data->get(0,candidates[0]).size();
vector<float> totals(numCounts);
for (size_t i = 0; i < candidates.size(); ++i) {
//cout << " i " << i << " candi " << candidates[i] ;
ScoreStats stats = m_score_data->get(i,candidates[i]);
if (stats.size() != totals.size()) {
stringstream msg;
msg << "Statistics for (" << "," << candidates[i] << ") have incorrect "
<< "number of fields. Found: " << stats.size() << " Expected: "
<< totals.size();
throw runtime_error(msg.str());
}
//Add up scores for all sentences, would normally be just one score
for (size_t k = 0; k < totals.size(); ++k) {
totals[k] += stats.get(k);
//cout << " stats " << stats.get(k) ;
}
//cout << endl;
}
//take average
for (size_t k = 0; k < totals.size(); ++k) {
//cout << "totals = " << totals[k] << endl;
//cout << "cand = " << candidates.size() << endl;
totals[k] /= candidates.size();
//cout << "finaltotals = " << totals[k] << endl;
}
scores.push_back(calculateScore(totals));
candidates_t last_candidates(candidates);
//apply each of the diffs, and get new scores
for (size_t i = 0; i < diffs.size(); ++i) {
for (size_t j = 0; j < diffs[i].size(); ++j) {
size_t sid = diffs[i][j].first;
size_t nid = diffs[i][j].second;
//cout << "sid = " << sid << endl;
//cout << "nid = " << nid << endl;
size_t last_nid = last_candidates[sid];
for (size_t k = 0; k < totals.size(); ++k) {
float diff = m_score_data->get(sid,nid).get(k)
- m_score_data->get(sid,last_nid).get(k);
//cout << "diff = " << diff << endl;
totals[k] += diff/candidates.size();
//cout << "totals = " << totals[k] << endl;
}
last_candidates[sid] = nid;
}
scores.push_back(calculateScore(totals));
}
//regularisation. This can either be none, or the min or average as described in
//Cer, Jurafsky and Manning at WMT08
if (_regularisationStrategy == REG_NONE || _regularisationWindow <= 0) {
//no regularisation
return;
}
//window size specifies the +/- in each direction
statscores_t raw_scores(scores);//copy scores
for (size_t i = 0; i < scores.size(); ++i) {
size_t start = 0;
if (i >= _regularisationWindow) {
start = i - _regularisationWindow;
}
size_t end = min(scores.size(), i + _regularisationWindow+1);
if (_regularisationStrategy == REG_AVERAGE) {
scores[i] = score_average(raw_scores,start,end);
} else {
scores[i] = score_min(raw_scores,start,end);
}
}
}

View File

@ -0,0 +1,83 @@
//
// SentenceLevelScorer.h
// mert_lib
//
// Created by Hieu Hoang on 22/06/2012.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//
#ifndef mert_lib_SentenceLevelScorer_h
#define mert_lib_SentenceLevelScorer_h
#include "Scorer.h"
#include <string>
#include <vector>
#include <vector>
#include <boost/spirit/home/support/detail/lexer/runtime_error.hpp>
/**
* Abstract base class for scorers that work by using sentence level
* statistics eg. permutation distance metrics **/
class SentenceLevelScorer : public Scorer
{
public:
SentenceLevelScorer(const std::string& name, const std::string& config): Scorer(name,config) {
//configure regularisation
static std::string KEY_TYPE = "regtype";
static std::string KEY_WINDOW = "regwin";
static std::string KEY_CASE = "case";
static std::string TYPE_NONE = "none";
static std::string TYPE_AVERAGE = "average";
static std::string TYPE_MINIMUM = "min";
static std::string TRUE = "true";
static std::string FALSE = "false";
std::string type = getConfig(KEY_TYPE,TYPE_NONE);
if (type == TYPE_NONE) {
_regularisationStrategy = REG_NONE;
} else if (type == TYPE_AVERAGE) {
_regularisationStrategy = REG_AVERAGE;
} else if (type == TYPE_MINIMUM) {
_regularisationStrategy = REG_MINIMUM;
} else {
throw boost::lexer::runtime_error("Unknown scorer regularisation strategy: " + type);
}
std::cerr << "Using scorer regularisation strategy: " << type << std::endl;
std::string window = getConfig(KEY_WINDOW,"0");
_regularisationWindow = atoi(window.c_str());
std::cerr << "Using scorer regularisation window: " << _regularisationWindow << std::endl;
std::string preservecase = getConfig(KEY_CASE,TRUE);
if (preservecase == TRUE) {
m_enable_preserve_case = true;
} else if (preservecase == FALSE) {
m_enable_preserve_case = false;
}
std::cerr << "Using case preservation: " << m_enable_preserve_case << std::endl;
}
~SentenceLevelScorer() {};
virtual void score(const candidates_t& candidates, const diffs_t& diffs,
statscores_t& scores);
//calculate the actual score
virtual statscore_t calculateScore(const std::vector<statscore_t>& totals) {
return 0;
};
protected:
//regularisation
ScorerRegularisationStrategy _regularisationStrategy;
size_t _regularisationWindow;
};
#endif

View File

@ -0,0 +1,119 @@
//
// StatisticsBasedScorer.cpp
// mert_lib
//
// Created by Hieu Hoang on 23/06/2012.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//
#include <iostream>
#include "StatisticsBasedScorer.h"
using namespace std;
StatisticsBasedScorer::StatisticsBasedScorer(const string& name, const string& config)
: Scorer(name,config) {
//configure regularisation
static string KEY_TYPE = "regtype";
static string KEY_WINDOW = "regwin";
static string KEY_CASE = "case";
static string TYPE_NONE = "none";
static string TYPE_AVERAGE = "average";
static string TYPE_MINIMUM = "min";
static string TRUE = "true";
static string FALSE = "false";
string type = getConfig(KEY_TYPE,TYPE_NONE);
if (type == TYPE_NONE) {
m_regularization_type = NONE;
} else if (type == TYPE_AVERAGE) {
m_regularization_type = AVERAGE;
} else if (type == TYPE_MINIMUM) {
m_regularization_type = MINIMUM;
} else {
throw runtime_error("Unknown scorer regularisation strategy: " + type);
}
// cerr << "Using scorer regularisation strategy: " << type << endl;
const string& window = getConfig(KEY_WINDOW, "0");
m_regularization_window = atoi(window.c_str());
// cerr << "Using scorer regularisation window: " << m_regularization_window << endl;
const string& preserve_case = getConfig(KEY_CASE,TRUE);
if (preserve_case == TRUE) {
m_enable_preserve_case = true;
} else if (preserve_case == FALSE) {
m_enable_preserve_case = false;
}
// cerr << "Using case preservation: " << m_enable_preserve_case << endl;
}
void StatisticsBasedScorer::score(const candidates_t& candidates, const diffs_t& diffs,
statscores_t& scores) const
{
if (!m_score_data) {
throw runtime_error("Score data not loaded");
}
// calculate the score for the candidates
if (m_score_data->size() == 0) {
throw runtime_error("Score data is empty");
}
if (candidates.size() == 0) {
throw runtime_error("No candidates supplied");
}
int numCounts = m_score_data->get(0,candidates[0]).size();
vector<int> totals(numCounts);
for (size_t i = 0; i < candidates.size(); ++i) {
ScoreStats stats = m_score_data->get(i,candidates[i]);
if (stats.size() != totals.size()) {
stringstream msg;
msg << "Statistics for (" << "," << candidates[i] << ") have incorrect "
<< "number of fields. Found: " << stats.size() << " Expected: "
<< totals.size();
throw runtime_error(msg.str());
}
for (size_t k = 0; k < totals.size(); ++k) {
totals[k] += stats.get(k);
}
}
scores.push_back(calculateScore(totals));
candidates_t last_candidates(candidates);
// apply each of the diffs, and get new scores
for (size_t i = 0; i < diffs.size(); ++i) {
for (size_t j = 0; j < diffs[i].size(); ++j) {
size_t sid = diffs[i][j].first;
size_t nid = diffs[i][j].second;
size_t last_nid = last_candidates[sid];
for (size_t k = 0; k < totals.size(); ++k) {
int diff = m_score_data->get(sid,nid).get(k)
- m_score_data->get(sid,last_nid).get(k);
totals[k] += diff;
}
last_candidates[sid] = nid;
}
scores.push_back(calculateScore(totals));
}
// Regularisation. This can either be none, or the min or average as described in
// Cer, Jurafsky and Manning at WMT08.
if (m_regularization_type == NONE || m_regularization_window <= 0) {
// no regularisation
return;
}
// window size specifies the +/- in each direction
statscores_t raw_scores(scores); // copy scores
for (size_t i = 0; i < scores.size(); ++i) {
size_t start = 0;
if (i >= m_regularization_window) {
start = i - m_regularization_window;
}
const size_t end = min(scores.size(), i + m_regularization_window + 1);
if (m_regularization_type == AVERAGE) {
scores[i] = score_average(raw_scores,start,end);
} else {
scores[i] = score_min(raw_scores,start,end);
}
}
}

View File

@ -0,0 +1,45 @@
//
// StatisticsBasedScorer.h
// mert_lib
//
// Created by Hieu Hoang on 23/06/2012.
// Copyright 2012 __MyCompanyName__. All rights reserved.
//
#ifndef mert_lib_StatisticsBasedScorer_h
#define mert_lib_StatisticsBasedScorer_h
#include "Scorer.h"
/**
* Abstract base class for Scorers that work by adding statistics across all
* outout sentences, then apply some formula, e.g., BLEU, PER.
*/
class StatisticsBasedScorer : public Scorer
{
public:
StatisticsBasedScorer(const std::string& name, const std::string& config);
virtual ~StatisticsBasedScorer() {}
virtual void score(const candidates_t& candidates, const diffs_t& diffs,
statscores_t& scores) const;
protected:
enum RegularisationType {
NONE,
AVERAGE,
MINIMUM
};
/**
* Calculate the actual score.
*/
virtual statscore_t calculateScore(const std::vector<int>& totals) const = 0;
// regularisation
RegularisationType m_regularization_type;
std::size_t m_regularization_window;
};
#endif

View File

@ -6,7 +6,7 @@
#include <vector>
#include "Types.h"
#include "Scorer.h"
#include "StatisticsBasedScorer.h"
class ScoreStats;

View File

@ -39,4 +39,7 @@ typedef std::vector<ScoreArray> scoredata_t;
typedef std::map<std::size_t, std::string> idx2name;
typedef std::map<std::string, std::size_t> name2idx;
typedef enum { HAMMING_DISTANCE=0, KENDALL_DISTANCE } distanceMetric_t;
typedef enum { REFERENCE_CHOICE_AVERAGE=0, REFERENCE_CHOICE_CLOSEST } distanceMetricReferenceChoice_t;
#endif // MERT_TYPE_H_

View File

@ -116,6 +116,15 @@ inline FeatureStatsType ConvertStringToFeatureStatsType(const std::string &str)
return ConvertCharToFeatureStatsType(str.c_str());
}
inline std::string trimStr(const std::string& Src, const std::string& c = " \r\n")
{
size_t p2 = Src.find_last_not_of(c);
if (p2 == std::string::npos) return std::string();
size_t p1 = Src.find_first_not_of(c);
if (p1 == std::string::npos) p1 = 0;
return Src.substr(p1, (p2-p1)+1);
}
// Utilities to measure decoding time
void ResetUserTime();
void PrintUserTime(const std::string &message);

View File

@ -27,6 +27,9 @@
#include "Util.h"
#include <sstream>
#include <iostream>
using namespace std;
namespace Moses
{
@ -38,25 +41,32 @@ std::auto_ptr<RuleTableLoader> RuleTableLoaderFactory::Create(
{
InputFileStream input(path);
std::string line;
std::getline(input, line);
std::vector<std::string> tokens;
Tokenize(tokens, line);
if (tokens.size() == 1) {
if (tokens[0] == "1") {
return std::auto_ptr<RuleTableLoader>(new RuleTableLoaderCompact());
bool cont = std::getline(input, line);
if (cont) {
std::vector<std::string> tokens;
Tokenize(tokens, line);
if (tokens.size() == 1) {
if (tokens[0] == "1") {
return std::auto_ptr<RuleTableLoader>(new RuleTableLoaderCompact());
}
std::stringstream msg;
msg << "Unsupported compact rule table format: " << tokens[0];
UserMessage::Add(msg.str());
return std::auto_ptr<RuleTableLoader>();
}
else if (tokens[0] == "[X]" && tokens[1] == "|||") {
return std::auto_ptr<RuleTableLoader>(new
RuleTableLoaderHiero());
}
std::stringstream msg;
msg << "Unsupported compact rule table format: " << tokens[0];
UserMessage::Add(msg.str());
return std::auto_ptr<RuleTableLoader>();
}
else if (tokens[0] == "[X]" && tokens[1] == "|||") {
return std::auto_ptr<RuleTableLoader>(new
RuleTableLoaderHiero());
return std::auto_ptr<RuleTableLoader>(new RuleTableLoaderStandard());
}
else
{ // empty phrase table
return std::auto_ptr<RuleTableLoader>(new RuleTableLoaderStandard());
}
return std::auto_ptr<RuleTableLoader>(new RuleTableLoaderStandard());
}
} // namespace Moses

View File

@ -57,7 +57,7 @@ void PhraseDictionaryALSuffixArray::InitializeForInput(InputType const& source)
// populate with rules for this sentence
long translationId = source.GetTranslationId();
string grammarFile = GetFilePath() + "/grammar.out." + SPrint(translationId);
string grammarFile = GetFilePath() + "/grammar.out." + SPrint(translationId) + ".gz";
// data from file
InputFileStream inFile(grammarFile);

View File

@ -5,16 +5,14 @@ use strict;
# if your tests need a new version of the test data, increment this
# and make sure that a moses-regression-tests-vX.Y is available for
# download from statmt.org (redpony AT umd dot edu for more info)
use constant TESTING_DATA_VERSION => '12';
# find the data directory in a few likely locations and make sure
# that it is the correct version
sub find_data_directory
{
my ($test_script_root, $data_dir) = @_;
my $data_version = TESTING_DATA_VERSION;
my @ds = ();
my $mrtp = "moses-reg-test-data-$data_version";
my $mrtp = "moses-reg-test-data";
push @ds, $data_dir if defined $data_dir;
push @ds, "$test_script_root/$mrtp";
push @ds, "/export/ws06osmt/regression-testing/$mrtp";
@ -41,9 +39,7 @@ standard locations: $test_script_root, /tmp, or /var/tmp with these
commands:
cd <DESIRED_INSTALLATION_DIRECTORY>
wget http://www.statmt.org/moses/reg-testing/moses-reg-test-data-$data_version.tgz
tar xzf moses-reg-test-data-$data_version.tgz
rm moses-reg-test-data-$data_version.tgz
git clone https://github.com/hieuhoang/moses-reg-test-data.git
EOT
exit 1;

View File

@ -332,6 +332,13 @@ build-biconcor
default-name: model/biconcor
ignore-unless: biconcor
error: usage
build-suffix-array
in: word-alignment corpus
out: phrase-translation-table
default-name: model/suffix-array
ignore-unless: suffix-array
error: usage
build-lex-trans
in: word-alignment corpus
out: lexical-translation-table
@ -362,6 +369,7 @@ extract-phrases
out: extracted-phrases
rerun-on-change: max-phrase-length translation-factors reordering-factors hierarchical-rule-set extract-settings training-options script use-ghkm
default-name: model/extract
ignore-if: suffix-array
build-reordering
in: extracted-phrases
out: reordering-table
@ -373,6 +381,7 @@ build-ttable
out: phrase-translation-table
rerun-on-change: translation-factors hierarchical-rule-set score-settings training-options script EVALUATION:report-precision-by-coverage include-word-alignment-in-rules
default-name: model/phrase-table
ignore-if: suffix-array
build-generation
in: corpus
out: generation-table
@ -820,6 +829,6 @@ analysis-precision
[REPORTING] single
report
in: EVALUATION:nist-bleu-score EVALUATION:nist-bleu-c-score EVALUATION:bolt-bleu-score EVALUATION:bolt-bleu-c-score EVALUATION:multi-bleu-score EVALUATION:multi-bleu-c-score EVALUATION:meteor-score EVALUATION:ter-score EVALUATION:wer-score EVALUATION:ibm-bleu-score EVALUATION:ibm-bleu-c-score EVALUATION:analysis EVALUATION:analysis-coverage EVALUATION:analysis-prec TRAINING:biconcor-model
in: EVALUATION:nist-bleu-score EVALUATION:nist-bleu-c-score EVALUATION:bolt-bleu-score EVALUATION:bolt-bleu-c-score EVALUATION:multi-bleu-score EVALUATION:multi-bleu-c-score EVALUATION:meteor-score EVALUATION:ter-score EVALUATION:wer-score EVALUATION:ibm-bleu-score EVALUATION:ibm-bleu-c-score EVALUATION:analysis EVALUATION:analysis-coverage EVALUATION:analysis-prec TRAINING:biconcor-model
out: report
default-name: evaluation/report

View File

@ -916,6 +916,10 @@ sub define_step {
elsif ($DO_STEP[$i] eq 'TRAINING:build-biconcor') {
&define_training_build_biconcor($i);
}
elsif ($DO_STEP[$i] eq 'TRAINING:build-suffix-array') {
&define_training_build_suffix_array($i);
}
elsif ($DO_STEP[$i] eq 'TRAINING:build-lex-trans') {
&define_training_build_lex_trans($i);
}
@ -1632,6 +1636,24 @@ sub define_training_symmetrize_giza {
&create_step($step_id,$cmd);
}
sub define_training_build_suffix_array {
my ($step_id) = @_;
my $scripts = &check_and_get("GENERAL:moses-script-dir");
my ($model, $aligned,$corpus) = &get_output_and_input($step_id);
my $sa_exec_dir = &check_and_get("TRAINING:suffix-array");
my $input_extension = &check_backoff_and_get("TRAINING:input-extension");
my $output_extension = &check_backoff_and_get("TRAINING:output-extension");
my $method = &check_and_get("TRAINING:alignment-symmetrization-method");
my $glue_grammar_file = &versionize(&long_file_name("glue-grammar","model",""));
my $cmd = "$scripts/training/wrappers/adam-suffix-array/suffix-array-create.sh $sa_exec_dir $corpus.$input_extension $corpus.$output_extension $aligned.$method $model $glue_grammar_file";
&create_step($step_id,$cmd);
}
sub define_training_build_biconcor {
my ($step_id) = @_;
@ -1748,18 +1770,35 @@ sub define_training_build_custom_generation {
sub define_training_create_config {
my ($step_id) = @_;
my ($config,
$reordering_table,$phrase_translation_table,$generation_table,@LM)
= &get_output_and_input($step_id);
my ($config,$reordering_table,$phrase_translation_table,$generation_table,@LM)
= &get_output_and_input($step_id);
my $cmd = &get_training_setting(9);
# get model, and whether suffix array is used. Determines the pt implementation.
my $hierarchical = &get("TRAINING:hierarchical-rule-set");
my $sa_exec_dir = &get("TRAINING:suffix-array");
my ($ptImpl, $numFF);
if ($hierarchical) {
if ($sa_exec_dir) {
$ptImpl = 10; # suffix array
$numFF = 7;
}
else {
$ptImpl = 6; # in-mem SCFG
}
}
else {
$ptImpl = 0; # phrase-based
}
# additional settings for factored models
$cmd .= &get_table_name_settings("translation-factors","phrase-translation-table",$phrase_translation_table);
$cmd .= &get_table_name_settings("reordering-factors","reordering-table",$reordering_table)
if $reordering_table;
$cmd .= &get_table_name_settings("generation-factors","generation-table",$generation_table)
if $generation_table;
my $ptCmd = "$phrase_translation_table:$ptImpl";
$ptCmd .= ":$numFF" if defined($numFF);
$cmd .= &get_table_name_settings("translation-factors","phrase-translation-table",$ptCmd);
$cmd .= &get_table_name_settings("reordering-factors","reordering-table",$reordering_table) if $reordering_table;
$cmd .= &get_table_name_settings("generation-factors","generation-table",$generation_table) if $generation_table;
$cmd .= "-config $config ";
my $decoding_graph_backoff = &get("TRAINING:decoding-graph-backoff");
@ -2139,8 +2178,7 @@ sub define_tuningevaluation_filter {
my $dir = &check_and_get("GENERAL:working-dir");
my $tuning_flag = !defined($set);
my ($filter_dir,
$input,$phrase_translation_table,$reordering_table) = &get_output_and_input($step_id);
my ($filter_dir,$input,$phrase_translation_table,$reordering_table) = &get_output_and_input($step_id);
my $binarizer = &get("GENERAL:ttable-binarizer");
my $hierarchical = &get("TRAINING:hierarchical-rule-set");
@ -2164,10 +2202,31 @@ sub define_tuningevaluation_filter {
$settings .= " -Binarizer \"$binarizer\"" if $binarizer;
$settings .= " --Hierarchical" if &get("TRAINING:hierarchical-rule-set");
# get model, and whether suffix array is used. Determines the pt implementation.
my $sa_exec_dir = &get("TRAINING:suffix-array");
my ($ptImpl, $numFF);
if ($hierarchical) {
if ($sa_exec_dir) {
$ptImpl = 10; # suffix array
$numFF = 7;
}
else {
$ptImpl = 6; # in-mem SCFG
}
}
else {
$ptImpl = 0; # phrase-based
}
# create pseudo-config file
my $config = $tuning_flag ? "$dir/tuning/moses.table.ini.$VERSION" : "$dir/evaluation/$set.moses.table.ini.$VERSION";
my $cmd = &get_training_setting(9);
$cmd .= &get_table_name_settings("translation-factors","phrase-translation-table",$phrase_translation_table);
my $ptCmd = "$phrase_translation_table:$ptImpl";
$ptCmd .= ":$numFF" if defined($numFF);
$cmd .= &get_table_name_settings("translation-factors","phrase-translation-table", $ptCmd);
$cmd .= &get_table_name_settings("reordering-factors","reordering-table",$reordering_table)
if $reordering_table;
# additional settings for hierarchical models
@ -2184,9 +2243,21 @@ sub define_tuningevaluation_filter {
$cmd .= "-config $config\n";
# filter command
$cmd .= "$scripts/training/filter-model-given-input.pl";
$cmd .= " $filter_dir $config $input_filter $settings\n";
my $sa_exec_dir = &get("TRAINING:suffix-array");
if ($sa_exec_dir) {
# suffix array
$cmd .= "$scripts/training/wrappers/adam-suffix-array/suffix-array-extract.sh $sa_exec_dir $phrase_translation_table $input_filter $filter_dir \n";
my $escaped_filter_dir = $filter_dir;
$escaped_filter_dir =~ s/\//\\\\\//g;
$cmd .= "cat $config | sed s/10\\ 0\\ 0\\ 7.*/10\\ 0\\ 0\\ 7\\ $escaped_filter_dir/g > $filter_dir/moses.ini \n";
}
else {
# normal phrase table
$cmd .= "$scripts/training/filter-model-given-input.pl";
$cmd .= " $filter_dir $config $input_filter $settings\n";
}
# clean-up
$cmd .= "rm $config";

View File

@ -149,7 +149,6 @@ sub train_recase_model {
else {
$cmd .= " --lm 0:3:$DIR/cased.srilm.gz:0";
}
$cmd .= " -scripts-root-dir $SCRIPTS_ROOT_DIR" if $SCRIPTS_ROOT_DIR;
$cmd .= " -config $CONFIG" if $CONFIG;
print STDERR $cmd."\n";
system($cmd) == 0 || die("Recaser model training failed with error " . ($? >> 8) . "\n");

View File

@ -1839,13 +1839,27 @@ sub create_ini {
$basic_weight_count++ if defined($_SCORE_OPTIONS) && $_SCORE_OPTIONS =~ /LowCountFeature/; # low count feature
$basic_weight_count++ if $_PCFG;
foreach my $f (split(/\+/,$___TRANSLATION_FACTORS)) {
$num_of_ttables++;
my $ff = $f;
$ff =~ s/\-/ /;
my $file = "$___MODEL_DIR/".($_HIERARCHICAL?"rule-table":"phrase-table").($___NOT_FACTORED ? "" : ".$f").".gz";
$file = shift @SPECIFIED_TABLE if scalar(@SPECIFIED_TABLE);
my $phrase_table_impl = ($_HIERARCHICAL ? 6 : 0);
print INI "$phrase_table_impl $ff $basic_weight_count $file\n";
$num_of_ttables++;
my $ff = $f;
$ff =~ s/\-/ /;
my $file = "$___MODEL_DIR/".($_HIERARCHICAL?"rule-table":"phrase-table").($___NOT_FACTORED ? "" : ".$f").".gz";
my $phrase_table_impl = ($_HIERARCHICAL? 6 : 0);
if (scalar(@SPECIFIED_TABLE)) {
$file = shift @SPECIFIED_TABLE;
my @toks = split(/:/,$file);
$file = $toks[0];
$phrase_table_impl = $toks[1];
if (@toks == 3) {
$basic_weight_count = $toks[2];
}
}
else {
}
print INI "$phrase_table_impl $ff $basic_weight_count $file\n";
}
if ($_GLUE_GRAMMAR) {
&full_path(\$___GLUE_GRAMMAR_FILE);

View File

@ -0,0 +1,33 @@
#!/bin/bash
# execute: ~/workspace/bin/moses-smt/scripts/training/wrappers/suffix-array-create.sh $SA_EXEC_DIR $SOURCE_CORPUS $TARGET_CORPUS $ALIGNMENT $SA_OUTPUT
# eg.
#SA_EXEC_DIR=/Users/hieuhoang/workspace/github/cdec/sa-extract
#SOURCE_CORPUS=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/training/corpus.2.fr
#TARGET_CORPUS=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/training/corpus.2.en
#ALIGNMENT=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/model/aligned.3.grow-diag-final-and
#SA_OUTPUT=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/model/suffix-array.3
SA_EXEC_DIR=$1
SOURCE_CORPUS=$2
TARGET_CORPUS=$3
ALIGNMENT=$4
SA_OUTPUT=$5
GLUE_GRAMMAR=$6
mkdir $SA_OUTPUT
rm -rf $SA_OUTPUT/bitext
pushd .
cd $SA_EXEC_DIR
./sa-compile.pl -output $SA_OUTPUT -b bitext_name=$SOURCE_CORPUS,$TARGET_CORPUS -a alignment_name=$ALIGNMENT > $SA_OUTPUT/extract.ini
popd
echo "<s> [X] ||| <s> [S] ||| 1 ||| ||| 0\n" > $GLUE_GRAMMAR
echo "[X][S] </s> [X] ||| [X][S] </s> [S] ||| 1 ||| 0-0 ||| 0\n" >> $GLUE_GRAMMAR
echo "[X][S] [X][X] [X] ||| [X][S] [X][X] [S] ||| 2.718 ||| 0-0 1-1 ||| 0\n" >> $GLUE_GRAMMAR

View File

@ -0,0 +1,25 @@
#!/bin/bash
# execute: ~/workspace/bin/moses-smt/scripts/training/wrappers/adam-suffix-array/suffix-array-extract.sh $SA_EXEC_DIR $MODEL_DIR $INPUT_FILE $OUTPUT_DIR
# eg.
#SA_EXEC_DIR=/Users/hieuhoang/workspace/github/cdec/sa-extract
#MODEL_DIR=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/model/suffix-array.3
#INPUT_FILE=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/tuning/input.lc.2
#OUTPUT_DIR=/Users/hieuhoang/workspace/data/europarl/exp/fr-en/tuning/filtered.sa.3
SA_EXEC_DIR=$1
MODEL_DIR=$2
INPUT_FILE=$3
OUTPUT_DIR=$4
mkdir $OUTPUT_DIR
pushd .
cd $OUTPUT_DIR
cat $INPUT_FILE | $SA_EXEC_DIR/escape-testset.pl | $SA_EXEC_DIR/extractor.py -c $MODEL_DIR/extract.ini
gzip $OUTPUT_DIR/grammar.out.*
popd

View File

@ -1,22 +0,0 @@
#!/bin/bash
# execute: ~/workspace/bin/moses-smt/scripts/training/wrappers/suffix-array-create.sh $SA_EXEC_DIR $SOURCE_CORPUS $TARGET_CORPUS $ALIGNMENT $SA_OUTPUT
SA_EXEC_DIR=$1
SOURCE_CORPUS=$2
TARGET_CORPUS=$3
ALIGNMENT=$4
SA_OUTPUT=$5
mkdir $SA_OUTPUT
rm -rf $SA_OUTPUT/bitext
pushd .
cd $SA_EXEC_DIR
./sa-compile.pl -output $SA_OUTPUT -b bitext_name=$SOURCE_CORPUS,$TARGET_CORPUS -a alignment_name=$ALIGNMENT > $SA_OUTPUT/extract.ini
popd

View File

@ -1,18 +0,0 @@
#!/bin/bash
# execute: ~/workspace/bin/moses-smt/scripts/training/wrappers/suffix-array-extract.sh $SA_EXEC_DIR $MODEL_DIR $INPUT_FILE $OUTPUT_DIR
SA_EXEC_DIR=$1
MODEL_DIR=$2
INPUT_FILE=$3
OUTPUT_DIR=$4
mkdir $OUTPUT_DIR
pushd .
cd $OUTPUT_DIR
$SA_EXEC_DIR/extractor.py -c $MODEL_DIR/extract.ini < $INPUT_FILE
popd