예제 #1
0
        public void NumberTest()
        {
            Assert.AreEqual(
                "25",
                StringNormalizer.NormalizeText(
                    "二十五", NormalizeTextOption.Number | NormalizeTextOption.KanjiDigit));
            Assert.AreEqual(
                "34000612",
                StringNormalizer.NormalizeText(
                    "三千四百万六百十二", NormalizeTextOption.Number | NormalizeTextOption.KanjiDigit));
            Assert.AreEqual(
                "34124612",
                StringNormalizer.NormalizeText(
                    "三千四百十2万四千六百十二", NormalizeTextOption.Number | NormalizeTextOption.KanjiDigit));
            Assert.AreEqual(
                "1209",
                StringNormalizer.NormalizeText(
                    "1209", NormalizeTextOption.Number | NormalizeTextOption.KanjiDigit));
            Assert.AreEqual(
                "21000005",
                StringNormalizer.NormalizeText(
                    "②千百万Ⅴ", NormalizeTextOption.Number | NormalizeTextOption.KanjiDigit));
            Assert.AreEqual(
                "1000000051100",
                StringNormalizer.NormalizeText(
                    "億510千100", NormalizeTextOption.Number | NormalizeTextOption.KanjiDigit));

            //StringNormalizer.NormalizeText("1209ィぅェガABCdefdefAA十二");
        }
예제 #2
0
        public static IDbContext AddMongDbContext(this IServiceCollection services, IConfiguration config)
        {
            string filePath         = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), StringNormalizer.JSON_FILE_NAME);
            var    stringNormalizer = new StringNormalizer(filePath);

            services.AddSingleton(stringNormalizer);

            var connString         = config.GetValue <string>("MongoConnString");
            var customeConnections = config.GetSection("CustomConnections").Get <List <CustomMongoConnection> >();

            foreach (var cc in customeConnections)
            {
                if (cc.ConnectionString == null)
                {
                    cc.ConnectionString = connString;
                }
            }

            var db = new MongoDbContext(
                config.GetValue <string>("DBName"), connString,
                customConnections: customeConnections,
                objectPreprocessor: stringNormalizer);

            services.AddSingleton <IDbContext>(db);
            services.AddSingleton <IReadOnlyDbContext>(db);
            return(db);
        }
예제 #3
0
        public void ConstructsWithDefaults()
        {
            StringNormalizer sn = new StringNormalizer();

            Assert.AreEqual(80, sn.MaxColumnCount);
            return;
        } // end of function - ConstructsWithDefaults
예제 #4
0
        protected virtual void RegisterServices(IKernel kernel)
        {
            var stringNormalizer = new StringNormalizer(Path.Combine(rootPath, "PersianCharsMap.json"));

            kernel.Bind <IStringNormalizer>().ToConstant(stringNormalizer);

            var db = new MongoDbContext(ConfigurationManager.AppSettings["DBName"], ConfigurationManager.AppSettings["MongoConnString"],
                                        getUsernameFunc: () => HttpContext.Current?.User?.Identity?.Name,
                                        objectPreprocessor: stringNormalizer,
                                        setDictionaryConventionToArrayOfDocuments: ConfigurationManager.AppSettings["setDictionaryConventionToArrayOfDocuments"] == "true",
                                        customConnections: GetCustomConnections());

            db.DefaultPreprocess = true;
            kernel.Bind <IDbContext>().ToConstant(db);
            kernel.Bind <IReadOnlyDbContext>().ToConstant(db);

            DataTableFactory tableFactory = new DataTableFactory(db);

            kernel.Bind <DataTableFactory>().ToConstant(tableFactory).InSingletonScope();

            string provincePrefix = ConfigurationManager.AppSettings["Province"];

            if (provincePrefix != null)
            {
                var province = db.FindFirst <Province>(p => p.Prefix == provincePrefix);
                kernel.Bind <Province>().ToConstant(province);
            }
        }
예제 #5
0
        public void Strings_AreNormalized_RemovingAllAccents_AndLowerCasing(string input, string expected)
        {
            StringNormalizer normalizer = new StringNormalizer();
            string           normalized = normalizer.Normalize(input);

            Assert.Equal(expected, normalized);
        }
        public IEnumerable <TransformedNodeModifier> ApplyTransformation(
            string jewelModifier, IEnumerable <PassiveNodeDefinition> nodesInRadius)
        {
            jewelModifier = StringNormalizer.MergeWhiteSpace(jewelModifier);
            var jewelMatch = _jewelData.JewelModifierRegex.Match(jewelModifier);

            if (!jewelMatch.Success)
            {
                yield break;
            }

            var valueMultiplier = _jewelData.GetValueMultiplier(jewelMatch);
            var nodeRegexes     = _jewelData.GetNodeModifierRegexes(jewelMatch).ToList();

            foreach (var node in nodesInRadius)
            {
                var effectiveness        = _createEffectivenessForNode(node.Id);
                var transformedModifiers = node.Modifiers
                                           .Select(StringNormalizer.MergeWhiteSpace)
                                           .SelectMany(m => TransformNodeModifier(m, nodeRegexes, valueMultiplier, effectiveness));
                foreach (var transformedNodeModifier in transformedModifiers)
                {
                    yield return(transformedNodeModifier);
                }
            }
        }
예제 #7
0
        public static void AddMongDbContext(this IServiceCollection services, IConfiguration config)
        {
            string filePath         = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), StringNormalizer.JSON_FILE_NAME);
            var    stringNormalizer = new StringNormalizer(filePath);

            services.AddSingleton <IStringNormalizer>(stringNormalizer);

            var connString        = config.GetValue <string>("MongoConnString");
            var customConnections = config.GetSection("CustomConnections").Get <List <CustomMongoConnection> >();

            foreach (var cc in customConnections)
            {
                if (cc.ConnectionString == null)
                {
                    cc.ConnectionString = connString;
                }
            }
            var provinceDbInfo = customConnections.Where(c => c.Type == nameof(Province)).FirstOrDefault();
            var provinceDb     = new MongoDbContext(provinceDbInfo.DBName, provinceDbInfo.ConnectionSettings);

            var dbs = new ProvinceDBs {
                CommonDb = provinceDb
            };
            var dbName = config.GetValue <string>("DBName");

            foreach (var p in provinceDb.FindGetResults <Province>(p => p.Applications.Contains("PM")))
            {
                var db = new MongoDbContext(dbName + "-" + p.Prefix, connString,
                                            customConnections: customConnections,
                                            objectPreprocessor: stringNormalizer);
                dbs.Add(p.Prefix, db);
            }

            services.AddSingleton(dbs);
        }
예제 #8
0
        public void ConstructsWithNonDefaults()
        {
            int mxCnt           = 1024;
            StringNormalizer sn = new StringNormalizer(mxCnt);

            Assert.AreEqual(mxCnt, sn.MaxColumnCount);
            return;
        } // end of function - ConstructsWithNonDefaults
예제 #9
0
        } // end of function - FormatPaddingComment

        /*----------------------- InitializeProvider ----------------------------*/
        /// <summary>
        /// Overridden to initialize various aspects of the provider that may need
        /// to be customized based on the provider
        /// </summary>
        /// <remarks>
        /// Initializes the code element property as well as the active edit point
        /// property
        /// </remarks>
        protected override void InitializeProvider()
        {
            ActiveEditPoint = Context.Document.GetActiveEditPoint();
            Normalizer      = new StringNormalizer(Context.State.Options.MaxColumnWidth,
                                                   OpenCommentStr,
                                                   CloseCommentStr);
            return;
        } // end of function - InitializeProvider
예제 #10
0
        public void NormalizeHandlesNull()
        {
            StringNormalizer sn = new StringNormalizer();

            foreach (var str in sn.Normalize(null))
            {
                ;
            }
            return;
        } // end of function - NormalizeHandlesNull
예제 #11
0
        public void NormalizeHandlesNegativeOffset()
        {
            StringNormalizer sn = new StringNormalizer();

            foreach (var str in sn.Normalize("", -1))
            {
                ;
            }
            return;
        } // end of function - NormalizeHandlesNegativeOffset
예제 #12
0
        public void NormalizeHandlesOutOfRange()
        {
            StringNormalizer sn = new StringNormalizer();

            foreach (var str in sn.Normalize("", sn.MaxColumnCount + 30))
            {
                ;
            }
            return;
        } // end of function - NormalizeHandlesOutOfRange
예제 #13
0
        /// <summary>
        /// 棋力を解析します。
        /// </summary>
        /// <remarks>
        /// <paramref name="text"/>に棋力を表す文字列が含まれていれば
        /// 棋力として認定することにします。
        /// (さすらいの12級 とかもあり)
        /// </remarks>
        public static SkillLevel ParseSkillLevel(string text)
        {
            if (string.IsNullOrEmpty(text))
            {
                return(null);
            }

            var skillLevel = new SkillLevel()
            {
                OriginalText = text.Trim()
            };

            var normalized = StringNormalizer.NormalizeText(text);
            var index      = 0;

            while (true)
            {
                // マッチする文字列がある間、棋力の検索をします。
                var m = SkillLevelRegex.Match(normalized, index);
                if (!m.Success)
                {
                    break;
                }

                // 棋力の解析を行います。
                var n10 = GetNumber(m.Groups[1].Value);
                var n1  = GetNumber(m.Groups[2].Value);
                if (n1 == null)
                {
                    index = m.Index + m.Length;
                    continue;
                }

                var skillKind = GetSkillKind(m.Groups[3].Value);
                if (skillKind == SkillKind.Unknown)
                {
                    index = m.Index + m.Length;
                    continue;
                }

                // プレイヤーの棋力を設定します。
                skillLevel.Kind  = skillKind;
                skillLevel.Grade =
                    ((n10 != null ? n10.Value : 0) * 10 + n1.Value);

                return(skillLevel);
            }

            // 棋力不明で登録時の文字列だけ保持します。
            return(skillLevel);
        }
예제 #14
0
        public void NormalizeShortString()
        {
            StringNormalizer sn   = new StringNormalizer();
            List <string>    strs = new List <string>();

            foreach (var str in sn.Normalize("test", 0))
            {
                strs.Add(str);
            }

            Assert.AreEqual(1, strs.Count);
            Assert.AreEqual("test", strs[0]);
            return;
        } // end of function - NormalizeShortString
예제 #15
0
        public void NormalizeShortLongContinuousString()
        {
            StringNormalizer sn   = new StringNormalizer(4);
            List <string>    strs = new List <string>();
            var tmp = "test testtesttest test";

            foreach (var str in sn.Normalize(tmp, 0))
            {
                strs.Add(str);
            }

            Assert.AreEqual(3, strs.Count);
            Assert.AreEqual("test", strs[0]);
            return;
        } // end of function - NormalizeShortLongContinuousString
예제 #16
0
 protected override void ProcessRecord()
 {
     if (this.ParameterSetName == "String")
     {
         string password = StringNormalizer.Normalize(this.Value);
         this.WriteObject(Global.Store.IsInStore(password, StoreType.Word));
     }
     else if (this.ParameterSetName == "SecureString")
     {
         string password = StringNormalizer.Normalize(this.SecureString.SecureStringToString());
         this.WriteObject(Global.Store.IsInStore(password, StoreType.Word));
     }
     else
     {
         this.WriteObject(Global.Store.IsInStore(this.Hash, StoreType.Word));
     }
 }
예제 #17
0
        public async Task<List<Team>> GetLaLigaStandings()
        {
            var root = await _service.RetrieveData<StandingsRoot>(FootballDataUrls.LaLigaTable);
            var table = root.Standings[0].Table;

            return table.Select(rawTeam => new Team
                {
                    Position = rawTeam.Position,
                    Team = StringNormalizer.Normalize(rawTeam.Team.Name),
                    Played = rawTeam.PlayedGames,
                    Won = rawTeam.Won,
                    Drawn = rawTeam.Draw,
                    Lost = rawTeam.Lost,
                    Gd = rawTeam.GoalDifference,
                    Points = rawTeam.Points
                })
                .ToList();
        }
예제 #18
0
        public Address Normalize(
            string text,
            string city       = null,
            string state      = null,
            string postalCode = null)
        {
            var parsed = Parse(text, city, state, postalCode);

            parsed.DirectionalPrefix = DirectionalFinder
                                       .ToDirectionalAbbreviation(parsed.DirectionalPrefix);
            parsed.StreetName        = TitleCase(parsed.StreetName);
            parsed.DirectionalSuffix = DirectionalFinder
                                       .ToDirectionalAbbreviation(parsed.DirectionalSuffix);
            parsed.StreetName = StringNormalizer
                                .SetOrdinalSuffixesToLowerCase(
                TitleCase(parsed.StreetName));

            if (!string.IsNullOrEmpty(parsed.StreetType))
            {
                string abbreviation = streetTypeMap[parsed.StreetType.ToUpper()].Abbreviation;
                if (!string.IsNullOrWhiteSpace(abbreviation))
                {
                    parsed.StreetType = TitleCase(abbreviation);
                }
                else
                {
                    parsed.StreetType = TitleCase(parsed.StreetType);
                }
            }

            parsed.UnitType      = TitleCase(parsed.UnitType);
            parsed.UnitNumber    = parsed.UnitNumber.Replace("-", string.Empty).ToUpper();
            parsed.City          = TitleCase(parsed.City);
            parsed.State         = parsed.State.ToUpper();
            parsed.PostalCode    = parsed.PostalCode.ToUpper();
            parsed.PostalCodeExt = parsed.PostalCodeExt.ToUpper();

            return(parsed);
        }
예제 #19
0
        /// <summary>
        /// 持ち駒の各駒をパースします。
        /// </summary>
        /// <remarks>
        /// 各駒文字を最初の漢字で表し、後に続く漢数字でその数を示します。
        /// </remarks>
        private Tuple <PieceType, int> ParseHandPiece(BWType bwType,
                                                      string handPieceText)
        {
            // 駒の種類を取得します。
            var piece = KifUtil.CharToPiece(handPieceText[0]);

            if (piece == null)
            {
                throw new ShogiException(
                          string.Format(
                              "{0}手の持ち駒'{1}'が正しくありません。",
                              bwType == BWType.Black ? "先" : "後",
                              handPieceText));
            }

            if (piece.IsPromoted)
            {
                throw new ShogiException(
                          string.Format(
                              "{0}手の持ち駒に成り駒があります。",
                              bwType == BWType.Black ? "先" : "後"));
            }

            // 駒の数指定があれば、それを解析します。
            int count = 1;

            if (handPieceText.Length > 1)
            {
                var numText    = handPieceText.Substring(1);
                var normalized = StringNormalizer.NormalizeNumber(numText, true);

                count = int.Parse(normalized);
            }

            return(Tuple.Create(piece.PieceType, count));
        }
예제 #20
0
        private List <Player> TransformFromDtoToDataModel(IEnumerable <FootballPlayer> dto)
        {
            var playerList = new List <Player>();

            foreach (var dtoPlayer in dto)
            {
                var rating = dtoPlayer.Rating != null?Math.Round((double)dtoPlayer.Rating, 2) : 0.00;

                var player = new Player
                {
                    Id          = dtoPlayer.PlayerId,
                    Name        = StringNormalizer.Normalize(dtoPlayer.PlayerName),
                    Position    = dtoPlayer.Position,
                    Age         = dtoPlayer.Age,
                    Nationality = dtoPlayer.Nationality,
                    Height      = dtoPlayer.Height,
                    Weight      = dtoPlayer.Weight,
                    Rating      = rating,
                    Per90Stats  = new Per90Stats
                    {
                        Shots = new Common.DataModels.Shots
                        {
                            Total              = ToPer90(dtoPlayer.Shots.Total),
                            OnTarget           = ToPer90(dtoPlayer.Shots.On),
                            PercentageOnTarget = Percentage(dtoPlayer.Shots.On, dtoPlayer.Shots.Total)
                        },
                        Passes = new Common.DataModels.Passes
                        {
                            Total     = ToPer90(dtoPlayer.Passes.Total),
                            Accuracy  = dtoPlayer.Passes.Accuracy,
                            KeyPasses = ToPer90(dtoPlayer.Passes.Key)
                        },
                        Tackles = new Common.DataModels.Tackles
                        {
                            TotalTackles  = ToPer90(dtoPlayer.Tackles.Total),
                            Blocks        = ToPer90(dtoPlayer.Tackles.Blocks),
                            Interceptions = ToPer90(dtoPlayer.Tackles.Interceptions)
                        },
                        Duels = new Common.DataModels.Duels
                        {
                            Won           = ToPer90(dtoPlayer.Duels.Won),
                            PercentageWon = Percentage(dtoPlayer.Duels.Won, dtoPlayer.Duels.Total)
                        },
                        Dribbles = new Common.DataModels.Dribbles
                        {
                            Attempted     = ToPer90(dtoPlayer.Dribbles.Attempts),
                            Won           = ToPer90(dtoPlayer.Dribbles.Success),
                            PercentageWon = Percentage(dtoPlayer.Dribbles.Success, dtoPlayer.Dribbles.Attempts)
                        },
                        Fouls = new Common.DataModels.Fouls
                        {
                            Committed = ToPer90(dtoPlayer.Fouls.Committed),
                            Drawn     = ToPer90(dtoPlayer.Fouls.Drawn)
                        }
                    },
                    Goals = dtoPlayer.Goals
                };

                playerList.Add(player);

                double ToPer90(int stat)
                {
                    // example
                    // (6705 passes / 18928 mins) x 90 = 31.9

                    if (dtoPlayer.Games.MinutesPlayed == 0)
                    {
                        return(0);
                    }

                    return(Math.Round((double)stat / (double)dtoPlayer.Games.MinutesPlayed * 90, 2));
                }

                double Percentage(double statSmall, double statTotal)
                {
                    // example
                    // 10/20 * 100 = 50%

                    try
                    {
                        return(Math.Round(statSmall / statTotal * 100, 2));
                    }
                    catch (DivideByZeroException)
                    {
                        return(0);
                    }
                }
            }

            return(playerList);
        }
예제 #21
0
        /// <summary>
        /// 差し手のパースを行います。
        /// </summary>
        public static Move ParseMoveEx(string text, bool isNeedEnd,
                                       bool isNormalizeText,
                                       ref string parsedText)
        {
            if (string.IsNullOrEmpty(text))
            {
                return(null);
            }

            var move = new Move()
            {
                OriginalText = text.Trim(),
            };

            // 文字列を正規化します。
            if (isNormalizeText)
            {
                text = StringNormalizer.NormalizeText(
                    text,
                    NormalizeTextOption.All & ~NormalizeTextOption.KanjiDigit);
            }

            // 投了などの特殊な指し手の判断を行います。
            var m = SpecialMoveRegex.Match(text);

            if (m.Success)
            {
                // 手番が指定されていればそれを取得します。
                move.BWType = GetBWType(m.Groups[3].Value);

                // 投了などの指し手の種類を取得します。
                var smoveType = GetSpecialMoveType(m.Groups[4].Value);
                if (smoveType == SpecialMoveType.None)
                {
                    return(null);
                }

                move.SpecialMoveType = smoveType;
            }
            else
            {
                m = MoveRegex.Match(text);
                if (!m.Success)
                {
                    return(null);
                }

                // 手番が指定されていれば、それを取得します。
                move.BWType = GetBWType(m.Groups[1].Value);

                // 33同銀などを有効にします。
                // 筋・段
                var file = GetNumber(m.Groups[2].Value);
                var rank = GetNumber(m.Groups[3].Value);

                // 「同~」であるかどうかを特定します。
                // 3同銀などの指し手を受理しないように、数字があれば、
                // ちゃんと二つとも設定されているか調べます。
                move.SameAsOld = m.Groups[4].Success;
                if (!move.SameAsOld || file != null || rank != null)
                {
                    // 筋
                    if (file == null)
                    {
                        return(null);
                    }
                    move.File = file.Value;

                    // 段
                    if (rank == null)
                    {
                        return(null);
                    }
                    move.Rank = rank.Value;
                }

                // 駒の種類
                var piece = GetPiece(m.Groups[5].Value);
                if (piece == null)
                {
                    return(null);
                }
                move.Piece = piece;

                // 相対位置
                move.RelFileType = GetRelFileType(m.Groups[6].Value);

                // 駒の移動の種類
                move.RankMoveType = GetRankMoveType(m.Groups[7].Value);

                // 駒打ちなどのアクション
                move.ActionType = GetActionType(m.Groups[8].Value);

                // 移動前の位置
                if (m.Groups[9].Success)
                {
                    move.SrcSquare = new Square(
                        int.Parse(m.Groups[10].Value),
                        int.Parse(m.Groups[11].Value));
                }
            }

            // 解析文字列が正しく終わっているか調べます。
            if (isNeedEnd &&
                (m.Length < text.Length && !char.IsWhiteSpace(text[m.Length])))
            {
                return(null);
            }
            if (!move.Validate())
            {
                return(null);
            }

            parsedText = m.Value;
            return(move);
        }
        public StringParseResult <TResult> Parse(string modifierLine)
        {
            var normalized = StringNormalizer.MergeWhiteSpace(modifierLine.Trim());

            return(_inner.Parse(normalized));
        }
 public bool IsTransformationJewelModifier(string jewelModifier)
 => _jewelData.JewelModifierRegex.IsMatch(StringNormalizer.MergeWhiteSpace(jewelModifier));