📄 linguisticanalyzer.java
字号:
/*
* Copyright (c) 2004, 2005 jASEN.org
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
*
* 3. The names of the authors may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* 4. Any modification or additions to the software must be contributed back
* to the project.
*
* 5. Any investigation or reverse engineering of source code or binary to
* enable emails to bypass the filters, and hence inflict spam and or viruses
* onto users who use or do not use jASEN could subject the perpetrator to
* criminal and or civil liability.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JASEN.ORG,
* OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
package org.jasen.core.linguistics;
import java.io.IOException;
import java.util.Arrays;
/**
* <P>
* Singleton linguistic analyzer class used to determine if a word is valid .
* </P>
* @author Jason Polites
*/
public final class LinguisticAnalyzer {
private static LinguisticAnalyzer instance;
private static final Object lock = new Object();
private LexicalTreeAnalyzer analyzer;
public static final double DEFAULT_THRESHOLD = 0.1d;
private LinguisticAnalyzer() {}
// Certain extended characters have logical replacements
// Spammers will often use extended ascii characters in replace
// of normal chars
public static char[] STANDARD_UNICODE_SEARCH = {
0x0021, // ! == i
0x0024, // $ == s
0x0031, // 1 == i
0x0040 // @ == a
};
public static char[] STANDARD_UNICODE_REPLACE = {
0x0069, // i
0x0073, // s
0x0069, // i
0x0061 // a
};
public static char[] EXTENDED_UNICODE_SEARCH = {
0x00A1, // i
0x00A2, // c
0x00A5, // y
0x00A9, // c
0x00AA, // a
0x00AE, // r
0x00B5, // u
0x00C0, // A
0x00C1, // A
0x00C2, // A
0x00C3, // A
0x00C4, // A
0x00C5, // A
0x00C7, // C
0x00C8, // E
0x00C9, // E
0x00CA, // E
0x00CB, // E
0x00CC, // I
0x00CD, // I
0x00CE, // I
0x00CF, // I
0x00D0, // D
0x00D1, // N
0x00D2, // O
0x00D3, // O
0x00D4, // O
0x00D5, // O
0x00D6, // O
0x00D7, // x
0x00D8, // O
0x00D9, // U
0x00DA, // U
0x00DB, // U
0x00DC, // U
0x00DD, // Y
0x00DE, // p
0x00DF, // B
0x00E0, // a
0x00E1, // a
0x00E2, // a
0x00E3, // a
0x00E4, // a
0x00E5, // a
0x00E6, // a
0x00E7, // c
0x00E8, // e
0x00E9, // e
0x00EA, // e
0x00EB, // e
0x00EC, // i
0x00ED, // i
0x00EE, // i
0x00EF, // i
0x00F0, // o
0x00F1, // n
0x00F2, // o
0x00F3, // o
0x00F4, // o
0x00F5, // o
0x00F6, // o
0x00F8, // o
0x00F9, // u
0x00FA, // u
0x00FB, // u
0x00FC, // u
0x00FD, // y
0x00FE, // p
0x00FF, // y
0x0100, // A
0x0101, // a
0x0102, // A
0x0103, // a
0x0104, // A
0x0105, // a
0x0106, // C
0x0107, // c
0x0108, // C
0x0109, // c
0x010A, // C
0x010B, // c
0x010C, // C
0x010D, // c
0x010E, // D
0x010F, // d
0x0110, // D
0x0111, // d
0x0112, // E
0x0113, // e
0x0114, // E
0x0115, // e
0x0116, // E
0x0117, // e
0x0118, // E
0x0119, // e
0x011A, // E
0x011B, // e
0x011C, // G
0x011D, // g
0x011E, // G
0x011F, // g
0x0120, // G
0x0121, // g
0x0122, // G
0x0123, // g
0x0124, // H
0x0125, // h
0x0126, // H
0x0127, // h
0x0128, // I
0x0129, // i
0x012A, // I
0x012B, // i
0x012C, // I
0x012D, // i
0x012E, // I
0x012F, // i
0x0130, // I
0x0131, // i
//0x0132, // IJ
//0x0133, // ij
0x0134, // J
0x0135, // j
0x0136, // K
0x0137, // k
0x0138, // K
0x0139, // L
0x013A, // l
0x013B, // L
0x013C, // l
0x013D, // L
0x013E, // l
0x013F, // L
0x0140, // l
0x0141, // L
0x0142, // l
0x0143, // N
0x0144, // n
0x0145, // N
0x0146, // n
0x0147, // N
0x0148, // n
0x0149, // n
0x014A, // N
0x014B, // n
0x014C, // O
0x014D, // o
0x014E, // O
0x014F, // o
0x0150, // O
0x0151, // o
//0x0152, // OE
//0x0153, // oe
0x0154, // R
0x0155, // r
0x0156, // R
0x0157, // r
0x0158, // R
0x0159, // r
0x015A, // S
0x015B, // s
0x015C, // S
0x015D, // s
0x015E, // S
0x015F, // s
0x0160, // S
0x0161, // s
0x0162, // T
0x0163, // t
0x0164, // T
0x0165, // t
0x0166, // T
0x0167, // t
0x0168, // U
0x0169, // u
0x016A, // U
0x016B, // u
0x016C, // U
0x016D, // u
0x016E, // U
0x016F, // u
0x0170, // U
0x0171, // u
0x0172, // U
0x0173, // u
0x0174, // W
0x0175, // w
0x0176, // Y
0x0177, // y
0x0178, // Y
0x0179, // Z
0x017A, // z
0x017B, // Z
0x017C, // z
0x017D, // Z
0x017E, // z
0x017F, // f
0x0180, // b
0x0181, // B
0x0182, // b
0x0183, // b
0x0184, // b
0x0185, // b
0x0186, // C
0x0187, // C
0x0188, // c
0x0189, // D
0x018A, // D
0x018B, // d
0x018C, // d
0x018D, // q
0x018E, // E
0x018F, // e
0x0190, // E
0x0191, // F
0x0192, // f
0x0193, // G
0x0194, // V
0x0195, // h
0x0196, // i
0x0197, // I
0x0198, // K
0x0199, // k
0x019A, // i
0x019B, // a
0x019C, // w
0x019D, // N
0x019E, // n
0x019F, // O
0x01A0, // O
0x01A1, // o
0x01A2, // q
0x01A3, // q
0x01A4, // P
0x01A5, // p
0x01A6, // R
0x01A7, // S
0x01A8, // s
0x01A9, // E
0x01AA, // l
0x01AB, // t
0x01AC, // T
0x01AD, // f
0x01AE, // T
0x01AF, // U
0x01B0, // u
0x01B1, // U
0x01B2, // V
0x01B3, // Y
0x01B4, // y
0x01B5, // Z
0x01B6, // z
0x01B7, // 3
0x01B8, // E
0x01B9, // e
0x01BA, // 3
0x01BB, // 2
0x01BC, // 5
0x01BD, // 5
0x01BE, // t
0x01BF, // p
0x01C0, // i
0x01C1, // i
0x01C2, // t
0x01C3, // i
//0x01C4, // DZ
//0x01C5, // Dz
//0x01C6, // dz
//0x01C7, // LJ
//0x01C8, // Lj
//0x01C9, // lj
//0x01CA, // NJ
//0x01CB, // NJ
//0x01CC, // nj
0x01CD, // A
0x01CE, // a
0x01CF, // I
0x01D0, // i
0x01D1, // O
0x01D2, // o
0x01D3, // U
0x01D4, // u
0x01D5, // U
0x01D6, // u
0x01D7, // U
0x01D8, // u
0x01D9, // U
0x01DA, // u
0x01DB, // U
0x01DC, // u
0x01DD, // e
0x01DE, // A
0x01DF, // a
0x01E0, // A
0x01E1, // a
0x01E2, // A
0x01E3, // a
0x01E4, // G
0x01E5, // g
0x01E6, // G
0x01E7, // g
0x01E8, // K
0x01E9, // k
0x01EA, // Q
0x01EB, // q
0x01EC, // Q
0x01ED, // q
0x01EE, // 3
0x01EF, // 3
0x01F0, // j
//0x01F1, // DZ
//0x01F2, // Dz
//0x01F3, // dz
0x01F4, // G
0x01F5, // g
0x01F6, // H
0x01F7, // P
0x01F8, // N
0x01F9, // n
0x01FA, // A
0x01FB, // a
0x01FC, // A
0x01FD, // a
0x01FE, // O
0x01FF, // o
0x0200, // A
0x0201, // a
0x0202, // A
0x0203, // a
0x0204, // E
0x0205, // e
0x0206, // E
0x0207, // e
0x0208, // I
0x0209, // i
0x020A, // I
0x020B, // i
0x020C, // O
0x020D, // o
0x020E, // O
0x020F, // o
0x0210, // R
0x0211, // r
0x0212, // R
0x0213, // r
0x0214, // U
0x0215, // u
0x0216, // U
0x0217, // u
0x0218, // S
0x0219, // s
0x021A, // T
0x021B, // t
0x021C, // 3
0x021D, // 3
0x021E, // H
0x021F, // h
0x0220, // n
0x0221, // d
0x0222, // 8
0x0223, // 8
0x0224, // Z
0x0225, // z
0x0226, // A
0x0227, // a
0x0228, // E
0x0229, // e
0x022A, // O
0x022B, // o
0x022C, // O
0x022D, // o
0x022E, // O
0x022F, // o
0x0230, // O
0x0231, // o
0x0232, // Y
0x0233, // y
0x0234, // l
0x0235, // n
0x0236 // t
};
public static char[] EXTENDED_UNICODE_REPLACE = {
0x0069, // i
0x0063, // c
0x0079, // y
0x0063, // c
0x0061, // a
0x0072, // r
0x0075, // u
0x0041, // A
0x0041, // A
0x0041, // A
0x0041, // A
0x0041, // A
0x0041, // A
0x0043, // C
0x0045, // E
0x0045, // E
0x0045, // E
0x0045, // E
0x0049, // I
0x0049, // I
0x0049, // I
0x0049, // I
0x0044, // D
0x004E, // N
0x004F, // O
0x004F, // O
0x004F, // O
0x004F, // O
0x004F, // O
0x0078, // x
0x004F, // O
0x0055, // U
0x0055, // U
0x0055, // U
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -